从 PDO 准备语句中检索原始 SQL 查询
在准备语句的上下文中,“原始 SQL 查询字符串”的概念并不简单。当在准备好的语句上调用 PDOStatement::execute() 时,执行的 SQL 语句与准备好的语句本身不同。
访问插入参数值的最终 SQL 查询并不是一个简单的过程准备好的陈述所固有的。参数没有与客户端的prepared语句合并,导致PDO无法访问。
SQL语句在prepare()操作时发送到数据库服务器,而参数在execute()时单独传输)被称为。 MySQL 维护一个通用查询日志,该日志显示了执行()之后带有嵌入值的最终 SQL。但是,此日志位于 PDO 外部,并不代表“原始”查询字符串。
一种解决方法涉及设置 PDO 属性 PDO::ATTR_EMULATE_PREPARES。在此模式下,PDO 在执行 SQL 查询之前将参数插入到 SQL 查询中。但是,此方法会损害准备好的语句的效率。
PDOStatement 对象的 $queryString 属性可能看起来是一个潜在的解决方案,但它仅在对象初始化期间设置,并不反映参数插值。将重写的查询作为一项功能公开是有益的,但除非使用 PDO::ATTR_EMULATE_PREPARES,否则它仍然无法满足要求。
利用 MySQL 服务器的常规查询日志提供了一种解决方法,因为它记录了重写的查询。尽管如此,这仅适用于日志记录期间,不适用于查询执行。
以上是如何从 PDO 准备语句中检索最终的参数插入 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!