Php 当ATTR_EMULATE_准备将集设置为false并终止查询时,MySQL PDO空结果集
当PDO::ATTR_EMULATE_PREPARES设置为false,并且在“发送数据”状态下终止查询(例如MySQL工作台->客户端连接->右键单击->终止查询),PDO“查询”或“执行”方法将返回空PDO语句。 PDO应该抛出异常(仅当PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION时)或返回false而不是PDO语句 结果,您的应用程序接收到空的结果集,尽管该查询应该返回一些数据。没有办法处理那种情况。当您对收到的PDO语句运行errorCode()时,会得到:“00000”,errorInfo()返回一个数组:Php 当ATTR_EMULATE_准备将集设置为false并终止查询时,MySQL PDO空结果集,php,mysql,pdo,mysqlnd,Php,Mysql,Pdo,Mysqlnd,当PDO::ATTR_EMULATE_PREPARES设置为false,并且在“发送数据”状态下终止查询(例如MySQL工作台->客户端连接->右键单击->终止查询),PDO“查询”或“执行”方法将返回空PDO语句。 PDO应该抛出异常(仅当PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION时)或返回false而不是PDO语句 结果,您的应用程序接收到空的结果集,尽管该查询应该返回一些数据。没有办法处理那种情况。当您对收到的PDO语句运行errorCode()时
['00000', null, null]
我正在运行:MySQL 5.6.22,php5.6.4,pdo_-MySQL-mysqlnd 5.0.11-dev-20120503
这导致我假设PDO或MySQL中都存在bug
这里解释如下:
对于MySQL>=5.1.17,建议依赖MySQL并关闭模拟
是否不推荐使用PDO仿真
当我将应用程序保留为默认(启用)状态时,它可能会受到什么影响
我个人认为这是一个非常关键的问题,因为当问题发生时(查询执行失败等),您的应用程序认为没有数据,而实际上有一些数据。想象一下,你的应用程序没有触发提醒,提醒你给女友买生日花?纯粹的邪恶
注意
当查询在状态中中断时:
"Copying to tmp table"
您将收到一条异常消息:
"SQLSTATE[70100]: <<Unknown error>>: 1317 Query execution was interrupted"
“SQLSTATE[70100]::1317查询执行被中断”
即使在“发送数据”状态下终止查询执行,也会得到完全相同的异常,但PDO::ATTR_EMULATE_PREPARES必须为se to true。终止查询和终止连接之间有区别吗?当终止连接时,会得到有效的PDO异常,消息:“SQLSTATE[HY000]:一般错误:2006 MySQL服务器已离开”