我正在尝试使用PDO调用存储过程,但在尝试对结果进行获取时遇到以下错误.
警告:数据包乱序.预计1收到16.数据包大小= 163
我的存储过程使用两个游标,我在从临时表中选择之前关闭它.我怀疑这可能是问题因为我可以直接在MySQL中调用我的SP并且可以看到结果.在迁移到php_pdo_mysql.dll之前使用php_mysql扩展时,我也没遇到过这个SP的问题.我还可以使用PDO在PHP中调用包含INPUT参数的其他更简单的存储过程,并且可以在没有任何错误的情况下获取结果.
以下是返回错误的代码:
$db = new PDO('mysql:host='.__DB_HOST__.';dbname='.__DB_NAME__.';charset=utf8', __DB_USER__, __DB_PASS__);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
/* DOES NOT WORK */
$queryResult = $db->prepare("CALL GetResults(:siteId,null)");
$siteId = 19;
$queryResult->bindValue(':siteId', $siteId, PDO::PARAM_INT);
$queryResult->execute();
$result = $queryResult->fetchAll(PDO::FETCH_ASSOC); // returns packets out of order warning
print_r($result);
Run Code Online (Sandbox Code Playgroud)
我在Try/Catch块中有这个代码,没有抛出任何异常.实际上,PHP在浏览器中将其显示为警告.
我的存储过程签名如下所示:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `GetResults`(IN siteIdParam INT(11), IN siteSearchText VARCHAR(45))
Run Code Online (Sandbox Code Playgroud)
我也不确定问题是否将null作为一个参数传递.有时第一个参数传递null,有时它是第二个.但无论它总是直接在MySQL服务器上运行.
我尝试了bindParam和bindValue,结果相同.我也可以发布我的SP但它可能有点矫枉过正.
有没有办法打开PDO扩展的其他日志记录?
任何想法或建议?如果您需要更多信息,请告诉我.
注意:我使用的是PHP v5.5.4和MySQL v5.6.14.
假设我有一个包含各种类型的编码表,例如:
ID EncodingName
------------------
1 UTF-8
2 ISO-8859-1
Run Code Online (Sandbox Code Playgroud)
另一个EncodingMapping使用这些ID来跟踪转换From和To的编码:
ID ItemId_FK EncodingFromId_FK EncodingToId_FK
-------------------------------------------------
1 45 2 1
2 78 1 2
Run Code Online (Sandbox Code Playgroud)
我想创建一个SQL语句,当ItemId_FK = 45时(例如),它创建以下结果:
FromEncoding ToEncoding
-------------------------
ISO-8859-1 UTF-8
Run Code Online (Sandbox Code Playgroud)
看起来它很简单,但我不能通过以这种格式返回单行来获得JOIN工作.
我到目前为止(这是错的):
SELECT EncodingName As FromEncoding, EncodingName As ToEncoding
FROM Encoding
LEFT JOIN EncodingMapping As em
ON Encoding.ID = em.EncodingFromId_FK OR Encoding.ID = em.EncodingToId_FK
WHERE ItemId_FK = 45
Run Code Online (Sandbox Code Playgroud) 我将如何获取INS元素的第一个实例或DEL元素的第一个实例,具体取决于首先显示哪个?
使用jQuery,我可以使用以下方法获取div中每个元素的第一个:
$("#output").find("ins").first();
$("#output").find("del").first();
Run Code Online (Sandbox Code Playgroud)
在以下html中:
<div id="output">
This is some text with some <ins>added text</ins> or maybe some <del>deleted text</del>
</div>
Run Code Online (Sandbox Code Playgroud)
我想得到INS元素,因为它首先出现.
但在这个版本中:
<div id="output">
This is some <del>deleted text</del> and also some <ins>added text</ins>.
</div>
Run Code Online (Sandbox Code Playgroud)
我想得到DEL元素,因为它首先出现.
有什么想法吗?