Intereting Posts

Со стороны сервера поддержки подготовлены инструкции с PDO?

Учитывая что-то вроде

DB()->prepare("SELECT * FROM mysql.general_log WHERE user_host LIKE ?"); $statement->execute( array('%console%') ); foreach($statement as $record){ var_dump($record); } 

Содержание general_log

 *************************** 1. row *************************** event_time: 2011-04-20 14:27:59 user_host: REDACTED[REDACTED] @ REDACTED [192.168.56.101] thread_id: 30 server_id: 0 command_type: Connect argument: REDACTED@REDACTED on REDACTED *************************** 2. row *************************** event_time: 2011-04-20 14:27:59 user_host: REDACTED[REDACTED] @ REDACTED [192.168.56.101] thread_id: 30 server_id: 0 command_type: Query argument: SELECT * FROM mysql.general_log WHERE user_host LIKE '%console%' 

Я работаю внутри рамки мерзости (без модульных тестов, без документации, без ryhme или причины), так что возможно, что где-то кто-то явно отключил MySQL, подготовленные инструкции, заставляющие PDO использовать эмулированный режим … или это ожидаемое поведение?

PHP – это PHP Version 5.2.10-2ubuntu6 для MySQL, версия клиентской библиотеки 5.1.41

Обновление: PDO () создается со следующими атрибутами

 PDO::ATTR_PERSISTENT => false PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true 

Я просмотрел документацию PDO, но, к сожалению, не упоминается флаг, подобный тому, который был написан в этом подобном вопросе

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

Проверьте атрибут PDO::ATTR_EMULATE_PREPARES . Он плохо документирован в текущем руководстве PDO. Плохо документированный, я имею в виду, что он появляется только в комментариях на сайте, а не в самом руководстве.

Как правило, вы хотите использовать собственные подготовленные заявления, когда это возможно. В случае с MySQL, если вы используете кеш запросов, вы действительно можете отключить собственные подготовленные заявления в PDO! В руководстве MySQL содержится больше информации , но в короткой версии версии до 5.1.17 не запускают подготовленные операторы через кэш запросов, а в последующих версиях используется кеш запросов в определенных конкретных (но общих) условиях.

(Некоторые люди рекомендуют полностью отключить кеш-запрос. Использование больших размеров кеша может фактически стать большим достижением производительности.)

По умолчанию PDO_MYSQL эмулирует подготовленные операторы. Чтобы использовать собственные подготовленные операторы на стороне сервера, необходимо явно установить

 $PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);