php保存成乱序,php – 调用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);
我在Try / Catch块中有这个代码,没有抛出任何异常.实际上,PHP在浏览器中将其显示为警告.
我的存储过程签名如下所示:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `GetResults`(IN siteIdParam INT(11), IN siteSearchText VARCHAR(45))
我也不确定问题是否将null作为一个参数传递.有时第一个参数传递null,有时它是第二个.但无论它总是直接在MySQL服务器上运行.
我尝试了bindParam和bindValue,结果相同.我也可以发布我的SP但它可能有点矫枉过正.
有没有办法打开PDO扩展的其他日志记录?
任何想法或建议?如果您需要更多信息,请告诉我.
注意:我使用的是PHP v5.5.4和MySQL v5.6.14.
解决方法:
在花了很多时间试图隔离我的代码部分来解决这个问题后,我注意到在将ATTR_EMULATE_PREPARES标志设置为true后错误消失了.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
这告诉PDO模拟准备好的语句,而不是MySQL本地模拟.根据我一直在阅读的内容,如果您使用的是最新版本的MySQL和PHP,通常建议关闭此标志(默认情况下为true).您可以在此SO article中找到有关该信息的更多信息.
我相信这是MySQL的一个错误(我遇到了5.6.17版本的问题).关于这个特定问题的讨论不多,所以希望这可以节省其他时间的故障排除.这个问题也在this MySQL bug page讨论过,但是在我的情况下,发布的解决方案对我没有帮助.
标签:php,mysql,sql,pdo,stored-procedures
来源: https://codeday.me/bug/20190713/1454505.html
php保存成乱序,php – 调用MySQL存储过程时出现乱序错误相关推荐
- 关于调用Oracle存储过程时发生“BCD Overflow”错误的处理
笔者最近在使用TSQLStoredProc调用Oracle存储过程时发现,即使存储过程体为空时,都会发生 BCD Overflow 错误,该表部分定义如下: PLANE_ALL_PARAMETER表: ...
- c++调用mysql存储过程_C++中ADO调用MySQL存储过程失败,诡异的语法异常,求解中,附源码...
C++中ADO调用mysql存储过程失败,诡异的语法错误,求解中,附源码 不管怎么调整,死活都出现下面的错误 C++ADO代码我实在找不到什么错误了,难道是MySQL有什么问题,或者有其他需要注意的地 ...
- hibernate mysql 存储过程_hibernate调用mysql存储过程
hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...
- jsp实现mysql存储过程_JSP调用MySQL存储过程收藏
JSP调用MySQL存储过程收藏 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: {c ...
- SpringBoot Mybatis注解调用Mysql存储过程并接收多个OUT结果集(多个mode=IN和mode=OUT参数)
其他同学提供的方式大部分都是Map接收调用mysql存储过程返回OUT结果集,要么游标,要么单个OUT,然后再次加工成想要的对象.涉及到直接用注解实现自动转换OUT参数结果集为对象时,都是忽略带过. ...
- vb获得mysql的值,VB.NET调用MySQL存储过程并获得返回值的方法
本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Data ...
- mysql存储过程 php_PHP调用MYSQL存储过程实例
说一下 在PHP页面中调用MYSQL存储过程的方法 以下是几个例子 仅供参考 实例一:无参的存储过程 $conn = mysql_connect('localhost','root','root') ...
- go mysql存储过程_Golang 调用MySQL存储过程
Golang 调用MySQL存储过程 最近写项目发现,很多逻辑业务的实现,写到数据库的存储过程中,然后调用,真的非常方便.后端代码量大大减少,最重要的是性能高,速度快! 引用说明:项目使用数据库ORM ...
- mysql inputoutput_PHP:同时使用INPUT和OUTPUT参数(不“ INOUT”)调用MySQL存储过程
从PHP,我想在MySQL中调用存储过程.该过程采用输入 和 输出参数- 而不是 " INOUT" 参数. 对于一个简单的示例,说我在MySQL中具有以下存储过程: DELIMIT ...
最新文章
- OpenCV 4.2.0 发布,Intel 开源的计算机视觉库
- http并发,操作系统如何识别对应的进程,线程请求
- 1756冗余_AB冗余模块1756-RM
- python深拷贝实现原理,js递归实现深拷贝
- STM32工作笔记0055---认识pcbdoc文件Schdoc文件
- python配置文件转dict
- 了解计算机PS,PS教程:你应该了解的PS基础绘图工具
- 线性代数第6章答案(仅供参考!!!)
- 中国地图json 文件下载
- Android APK反编译教程
- 梦洁高端化,能解决中国人的睡眠问题吗?
- 学习java之java帝国的诞生
- html页面布局实验原理,html网页制作实验报告.doc
- RTX 4070TI和RTX 4080差距 RTX4070ti和4080区别对比
- NeuroAI作者,冷泉港主任独家专访:忽视神经科学给我们的启示是愚蠢的
- 数据的聚合与分组运算
- 优缺点 快速扫描 硬盘监测_MHDD快速检测硬盘坏道
- OSPF与BGP联动
- android hook api
- PHP反射ReflectionClass、ReflectionMethod