如何获取 Pear MDB2 生成的 SQL 而不执行它?
我正在使用 Pear MDB2 和 PHP 5.3。我正在编写一个更新数据库的项目,在让它开始更改数据之前,我想在实际执行它们之前看看 autoPrepare() 和execute() 生成的 SQL 查询是什么样的。
我计划创建并执行这样的更新查询:
$stmt = $db->extended->autoPrepare($tableName, $tableColumns,
MDB2_AUTOQUERY_UPDATE, 'id = ' . $db->quote(12345, 'integer'),
$tableColumnTypes));
$res =& $stmt->execute($tableColumnValues);
我已经知道我可以通过访问 $stmt->query< 查看由
autoPrepare()
生成的 SQL,其中包含值的占位符/代码>。我希望看到由 execute()
生成的完整 SQL,其中值替换了占位符,没有实际将查询发送到数据库 。
我怎样才能做到这一点?
I'm working with Pear MDB2 with PHP 5.3. I'm coding a project that updates a DB and before I let it start changing data, I'd like to see what the SQL queries generated by autoPrepare() and execute() look like before actually executing them.
I plan to create and execute an update query like this:
$stmt = $db->extended->autoPrepare($tableName, $tableColumns,
MDB2_AUTOQUERY_UPDATE, 'id = ' . $db->quote(12345, 'integer'),
$tableColumnTypes));
$res =& $stmt->execute($tableColumnValues);
I already know that I can see the SQL generated by autoPrepare()
with placeholders for the values by accessing $stmt->query
. I'd like to see the completed SQL generated by execute()
, with values substituted for placeholders, without actually sending the query to the DB.
How can I do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
准备好的语句在服务器端编译,因此在执行之前您无法看到它们。例如,在 MySQL 中,如果您想执行准备好的语句,MDB2 实际上做的是:
服务器永远不会“返回”它执行的实际查询。如果您想查看执行了哪些查询,则必须设置查询日志。
例如,在 MySQL (my.cnf) 中:
对于上面的查询示例,查询日志将显示:
Prepared statements are compiled on the server-side, so you can't see them before they execute. Per example, in MySQL, if you want to execute a prepared statement, what MDB2 actually does is:
The server never "returns" the actual query it executed. If you want to see what query was executed, you'll have to set-up a query log.
Per example, in MySQL (my.cnf):
The query log would show, for the query example above: