在PHP中,当使用带有参数化查询的PDO访问MySQL数据库时,如何检查最终查询(在替换所有令牌之后)?
有没有办法检查数据库真正执行的是什么?
是否可以从PDO对象获取带有绑定参数的查询字符串而不先执行它?我有类似于以下代码(其中$ dbc是PDO对象):
$query = 'SELECT * FROM users WHERE username = ?';
$result = $dbc->prepare($query);
$username = 'bob';
$result->bindParam(1, $username);
echo $result->queryString;
Run Code Online (Sandbox Code Playgroud)
目前,这将回显出一个SQL语句,如:"SELECT*FROM users WHERE username =?".但是,我希望包含绑定参数,使其看起来像:'SELECT*FROM users WHERE username ='bob'".有没有办法在不执行它的情况下执行此操作或通过某些内容用参数替换问号喜欢preg_replace?
我两年前偶然发现了这个问题.
有没有办法在预准备语句上调用PDOStatement :: execute()时获取原始SQL字符串?出于调试目的,这将非常有用.
获胜的答案说明了这一点
[...]如果设置PDO属性PDO :: ATTR_EMULATE_PREPARES,您也可以获得所需的内容.在此模式下,PDO将参数插入到SQL查询中,并在执行()时发送整个查询.
但它没有提到如何获得结果查询字符串.我知道这是一个糟糕的主意,但在调试模式下这并不会让我感到困扰.有人知道怎么做这个吗?
PS如果有某种方式我可以重新开放/引起对原来两年前主题的关注,而不是打开一个新主题,请告诉我.