我正在使用PHP 5.3的Pear MDB2。我正在编写一个更新数据库的项目,在我开始更改数据之前,我想看看autoPrepare()和execute()在实际执行之前生成的SQL查询是什么样的。
我打算创建并执行这样的更新查询:
$stmt = $db->extended->autoPrepare($tableName, $tableColumns,
MDB2_AUTOQUERY_UPDATE, 'id = ' . $db->quote(12345, 'integer'),
$tableColumnTypes));
$res =& $stmt->execute($tableColumnValues);
我已经知道,我可以通过访问autoPrepare()
来查看$stmt->query
生成的SQL和值的占位符。我希望看到execute()
生成的已完成的SQL,其值替换占位符 ,而不实际将查询发送到数据库 。
我该怎么做?
答案 0 :(得分:5)
预编译语句在服务器端编译,因此在执行之前无法看到它们。例如,在MySQL中,如果要执行预准备语句,MDB2实际上做的是:
PREPARE stmt FROM 'SELECT * FROM foo WHERE bar = ?';
SET @baz = 'baz';
EXECUTE stmt USING @baz;
服务器永远不会“返回”它执行的实际查询。如果您想查看执行 的查询,则必须设置查询日志。
每个例子,在MySQL(my.cnf)中:
[mysqld]
general_log_file = /var/log/mysql_queries.log
general_log = 1
对于上面的查询示例,查询日志将显示:
Query PREPARE stmt FROM 'SELECT * FROM foo WHERE bar = ?';
Query SET @baz = 'baz';
Query EXECUTE stmt USING @baz;
Execute SELECT * FROM foo WHERE bar = 'baz';
答案 1 :(得分:0)
print_r ($db->last_query, true);