从 PDO 准备好的语句中检索原始 SQL 查询字符串
使用 PDO 准备好的语句执行查询时,它对于调试目的非常有价值检索执行的原始 SQL 字符串。然而,与参数化查询不同,准备好的语句不会将参数与客户端的 SQL 查询结合起来。
在prepare()和execute()操作期间,SQL语句和参数分别传输到数据库服务器, 分别。因此,PDO 无法访问与参数组合的 SQL 字符串。
MySQL 常规查询日志:
使用插值捕获最终查询的一种方法是使用MySQL的一般查询日志。该日志记录execute() 调用后的最终SQL 语句。然而,这种技术需要在 MySQL 服务器上启用通用查询日志。
PDO 准备语句模拟:
另一个选项是启用 PDO 属性 PDO::ATTR_EMULATE_PREPARES 。在此模式下,PDO 在执行期间发送 SQL 查询之前将参数插入到 SQL 查询中。但是,需要注意的是,此方法不是真正的准备好的语句执行,并且规避了使用准备好的查询的好处。
PDOStatement 属性混淆:
访问的初始尝试内插查询可能涉及查阅 PDOStatement 属性 $queryString。但是,此属性仅在 PDOStatement 构造函数期间设置,并且在将参数插入查询时不会更新。
重写查询的公开:
潜在的功能改进PDO 将公开重写的查询。即使这种方法也只能在使用 PDO::ATTR_EMULATE_PREPARES 时提供完整的查询。
解决方法:
作为替代方案,您可以依赖 MySQL 服务器的常规查询日志在查询执行后查看带有插值参数值的重写查询。
以上是如何从 PDO 准备语句中检索最终的 SQL 查询字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!