Когда для PDO :: ATTR_EMULATE_PREPARES задано значение false и ваш запрос уничтожен (например, MySQL Workbench -> Клиентские подключения -> Правый клик -> Запрос на уничтожение) во время состояния: методы «Отправка данных», PDO «запрос» или «выполнить» возвращает пустое PDOStatement.
PDO должен выдать ИСКЛЮЧЕНИЕ (только если для PDO :: ATTR_ERRMODE установлено значение PDO :: ERRMODE_EXCEPTION) или вернуть false вместо PDOStatement.
В результате ваше приложение получает пустой набор результатов, хотя этот запрос должен возвращать некоторые данные. Нет способа справиться с этой ситуацией. Когда вы запускаете errorCode () для полученного PDOStatement, вы получаете: «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: использовать PDO :: ATTR_EMULATE_PREPARES или нет?
что для MySQL> = 5.1.17 рекомендуется полагаться на MySQL и отключить эмуляцию.
Не рекомендуется ли использовать эмуляцию PDO?
Что может повлиять на мое приложение, если я оставлю его по умолчанию (включено)?
Лично я думаю, что это довольно критическая проблема, потому что, когда возникает проблема (сбой выполнения запроса и т. Д.), Ваше приложение думает, что данных нет, а на самом деле их есть. Представьте, что в вашем приложении не было напоминания о покупке цветов на день рождения у вашей подруги? Чистое зло.
Заметка
Когда запрос прерывается в состоянии:
"Copying to tmp table"
Вы получаете PDOException с сообщением:
"SQLSTATE[70100]: <<Unknown error>>: 1317 Query execution was interrupted"
Вы получаете точно такое же исключение при прекращении выполнения этого запроса, даже если он находится в состоянии «Отправка данных», но для PDO :: ATTR_EMULATE_PREPARES должно быть установлено значение true.
Задача ещё не решена.
Других решений пока нет …