在带有PDO的PHP中,如何检查最终的SQL参数化查询?
2022-08-30 06:43:24
在PHP中,当使用参数化查询的PDO访问MySQL数据库时,如何检查最终查询(在替换所有令牌后)?
有没有办法检查数据库真正执行了什么?
在PHP中,当使用参数化查询的PDO访问MySQL数据库时,如何检查最终查询(在替换所有令牌后)?
有没有办法检查数据库真正执行了什么?
因此,我想我最终会回答我自己的问题,以便有一个完整的解决方案。但必须感谢Ben James和Kailash Badu为此提供了线索。
简短的回答
正如Ben James所提到的:不。
完整的 SQL 查询在 PHP 端不存在,因为带令牌的查询和参数是单独发送到数据库的。只有在数据库端存在完整查询。
即使尝试创建一个函数来替换PHP端的令牌,也不能保证替换过程与SQL过程相同(诸如令牌类型,bindValue与bindParam等棘手的东西......)
解决方法
这是我详细阐述Kailash Badu的答案的地方。通过记录所有SQL查询,我们可以看到服务器上真正运行的内容。使用mySQL,这可以通过更新my.cnf(或my.ini在我的情况下使用Wamp服务器)并添加如下行来完成:
log=[REPLACE_BY_PATH]/[REPLACE_BY_FILE_NAME]
只是不要在生产环境中运行它!!!