当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。