Учитывая что-то вроде
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%'
Я работаю внутри мерзкой структуры (без модульных тестов, без документации, без правил или причин), поэтому возможно ли, что где-то кто-то явно отключил подготовленные операторы MySQL, заставляющие PDO использовать эмулируемый режим... или это ожидаемое поведение?
PHP — это драйвер PHP Version 5.2.10-2ubuntu6
PDO для MySQL, версия клиентской библиотеки 5.1.41.
Обновление: PDO() построен со следующими атрибутами
PDO::ATTR_PERSISTENT => false
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
Я просмотрел документацию PDO, но, к сожалению, там не упоминается флаг, подобный тому, о котором написано в этот похожий вопрос
PDO::ATTR_EMULATE_PREPARES
— он хорошо спрятан. - person Charles   schedule 22.04.2011