假设有以下内容
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
,
MySQL PDO驱动程序客户端库版本为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
-- 它很难找到。 - Charles