当ATTR_EMULATE_PREPARES设置为false并且查询被终止时,MySQL PDO为空结果集

时间:2015-05-08 11:12:40

标签: php mysql pdo mysqlnd

当PDO :: ATTR_EMULATE_PREPARES设置为false并且您的查询被终止时(例如MySQL Workbench - >客户端连接 - >右键单击 - > Kill查询)状态:"发送数据", PDO"查询"或者"执行"方法,返回空的PDOStatement。 PDO应抛出一个EXCEPTION(仅当PDO :: ATTR_ERRMODE设置为PDO :: ERRMODE_EXCEPTION时)或返回false而不是PDOStatement。

因此,您的应用程序会收到空结果集,尽管该查询应该返回一些数据。没有办法处理这种情况。当您在收到的PDOStatement上运行errorCode()时,您会得到:' 00000',errorInfo()返回一个数组:

['00000', null, null]

我正在运行:MySQL 5.6.22,PHP 5.6.4,pdo_mysql - mysqlnd 5.0.11-dev - 20120503

这使我假设PDO或MySQL中存在错误。

这里解释:PDO MySQL: Use PDO::ATTR_EMULATE_PREPARES or not? 对于MySQL> = 5.1.17,建议依赖MySQL并关闭仿真。

是否建议使用PDO仿真?

当我将其保留为默认值(启用)时,对我的应用程序可能会有什么影响?

我个人认为这是一个非常关键的问题,因为当问题发生时(查询执行失败等),你的应用程序认为实际存在某些数据时没有数据。想象一下,您的应用程序没有触发提醒购买女友生日花?纯粹的邪恶。

注意

当查询在状态中断时:

 "Copying to tmp table"

你得到PDOException并带有消息:

 "SQLSTATE[70100]: <<Unknown error>>: 1317 Query execution was interrupted"

即使在&#34;发送数据&#34;中,当您终止查询执行时,也会得到完全相同的异常。 state,但PDO :: ATTR_EMULATE_PREPARES必须为se。

0 个答案:

没有答案