Понимание PDO, которое у меня было до сих пор, заключается в том, что PDO будет использовать реально подготовленные операторы там, где это возможно, и подражать им там, где это невозможно.Я также понимал, что в отношении mysql будут использованы реальные подготовленные операторы, если вы будете общаться с версией mysql, которая их поддерживает.
На самом деле страница руководства по PHP для драйвера MySQL PDO говорит о многом.http://php.net/manual/en/ref.pdo-mysql.php
Однако, по другому вопросу SO, который я помогал на Как заменить все вхождения char на элементы из массива? , кто-то сделал комментарий, что это не так, ичто на самом деле PDO эмулирует подготовленные операторы при обращении к базе данных MySQL.
Мне не повезло найти доказательства, подтверждающие выдвинутые там заявления, но я обнаружил, что есть атрибут PDO :: ATTR_EMULATE_PREPARES, который можно настроить для переключения подготовленной эмуляции оператора.
так в чем же правда?Разве PDO не использует подготовленные операторы с mysql?Если нет, можно ли его заставить сделать это, и если да, то следует ли это делать?Я всегда предполагал, что, поскольку у mysql есть реально подготовленные утверждения, что PDO будет их использовать, как утверждается в руководстве.Руководство является неточным?
РЕДАКТИРОВАТЬ ДОБАВИТЬ : Недавно я прочитал несколько статей, которые, по крайней мере, дают достаточное обоснование того, почему реальные подготовленные запросы по умолчанию отключены.PHP-скрипты, как правило, недолговечны и работают достаточно долго, чтобы генерировать ответ на запрос, после чего все их ресурсы освобождаются.Для любого запроса, который вы выполняете только один раз за запрос, вам фактически нужно выполнить 2 команды SQL (команда prepare и команда execute), поэтому для любого подготовленного оператора, который выполняется только один раз, вы, вероятно, получите немного худшую производительность, чем с эмулированнымподготовленное заявление.Для запросов, которые должны выполняться в цикле, реальные подготовленные операторы, вероятно, будут работать лучше, но такие случаи относительно редки в типе модели запрос / ответ, для которой обычно используется PHP.
Я все еще думаю, что реальные подготовленные операторы предпочтительнее, но по крайней мере у меня есть разумное объяснение того, почему PDO использует эмулированные запросы по умолчанию.