Могу ли я использовать реально подготовленные операторы для MySQL с PDO сейчас? - PullRequest
5 голосов
/ 27 октября 2011

5 лет назад (правда!) Вез Ферлонг был ведущим разработчиком PDO, и он написал это:

Я рекомендую использовать следующий атрибут при работе с PDO :: MYSQL, доступным втекущие кандидаты и снимки релиза PHP 5.1.3:

$ db-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, true);

Это заставляет использовать собственный анализатор запросов PDO вместоСобственно подготовленные операторы API-интерфейсов в клиенте mysql эффективно устраняют эти проблемы.

Обоснование дано на http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/

Однако он не мог ответить, если проблемы были устранены сейчасчто PDO использует Mysqlnd (по крайней мере, я так полагаю).

Кто-нибудь знает?

1 Ответ

7 голосов
/ 27 октября 2011

Да, если вы установите ATTR_EMULATE_PREPARES на false (или 0), он будет использовать реально подготовленные операторы.

В некотором роде.У этого все еще есть вся запасная логика.Таким образом, в то время как mysqli :: prepare потерпит неудачу, если подготовка с сервера завершилась неудачно, PDO не будет работать, поскольку он будет вынужден эмулировать подготовку.Причина этого заключается в том, что PDO может использовать подготовленные операторы в версиях MySQL, которые его не поддерживают, а также для операторов (таких как ALTER), которые не поддерживают подготовку.

Таким образом, он будет использовать реально подготовленные операторы всякий раз, когда MySQL разрешит вам (опять же, только если ATTR_EMULATE_PREPARES в false) ...

...