小编htt*_*203的帖子

调用MySQL存储过程时数据包乱序错误

我正在尝试使用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.

php mysql sql pdo stored-procedures

5
推荐指数
1
解决办法
2万
查看次数

MySQL JOIN用另一个表中的值替换ID

假设我有一个包含各种类型的编码表,例如:

    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)

mysql

4
推荐指数
1
解决办法
4301
查看次数

如何使用JQuery查找element1或element2的第一个实例?

我将如何获取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元素,因为它首先出现.

有什么想法吗?

html javascript jquery

0
推荐指数
1
解决办法
72
查看次数

标签 统计

mysql ×2

html ×1

javascript ×1

jquery ×1

pdo ×1

php ×1

sql ×1

stored-procedures ×1