从 PDO 准备好的语句中获取查询 [重复]
Posted
技术标签:
【中文标题】从 PDO 准备好的语句中获取查询 [重复]【英文标题】:Get query back from PDO prepared statement [duplicate] 【发布时间】:2011-01-15 15:16:51 【问题描述】:有没有办法检索用于生成 PDO 准备语句对象的查询?
【问题讨论】:
【参考方案1】:实现你想要的最简单的方法是:
$statement->debugDumpParams();
只需确保在执行语句后添加它即可。
【讨论】:
这个答案应该是最受支持/接受的。网上有很多答案,比如扩展 PDO 等,但这个是更简单快捷的答案【参考方案2】:此程序有效。由于 debugDumpParams() 不返回输出。这是我设计的一个小技巧。
// get the output before debugDumpParams() get executed
$before = ob_get_contents();
//start a new buffer
ob_start();
// dump params now
$smt->debugDumpParams();
// save the output in a new variable $data
$data = ob_get_contents();
// clean the output screen
ob_end_clean();
// display what was before debugDumpParams() got executed
printf("%s", $before);
$statement = "";
// Now for prepared statements
if (stristr($data, 'Sent SQL') !== false)
// begin extracting from "Sent SQL"
$begin = stristr($data, 'Sent SQL');
// get the first ] square bracket
$square = strpos($begin, "]");
// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");
$sql = substr($begin, 0, $ending);
$sql = trim($sql);
// sql statement here
$statement = $sql;
else
if (stristr($data, 'SQL') !== false)
$begin = stristr($data, 'SQL');
// get the first ] square bracket
$square = strpos($begin, "]");
// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");
$sql = substr($begin, 0, $ending);
$sql = trim($sql);
$statement = $sql;
// statement here
echo $statement;
希望这会有所帮助。
【讨论】:
【参考方案3】:如果您不反对扩展默认的 \PDO 和 \PDOStatement 对象,您可以考虑查看:
github.com/noahheck/E_PDOStatement
此 PDO 扩展允许您查看完整的查询语句作为可能在数据库级别执行的示例。它使用正则表达式来插入 PDO 语句的绑定参数。
通过扩展默认的 \PDOStatement 定义,E_PDOStatement 能够为默认功能提供这种增强,而无需修改您的正常工作流程。
免责声明:我创建了这个扩展。
我只是希望它对其他人有所帮助。
【讨论】:
【参考方案4】:试试$statement->queryString。
【讨论】:
每当我使用它时,它仍然将参数显示为占位符。反正有没有设置参数的字符串? DB 的获取方式? 您必须检查您的数据库日志。对于 mysql,请查看此页面:dev.mysql.com/doc/refman/5.0/en/query-log.html 无用的答案。 对于那些寻找带有值的查询字符串的人,请参阅***.com/q/210564/457836 了解为什么这不起作用,以及自己获取它的函数。 为什么有这么多的赞成票和被接受的分析器?正如 JD Isaaca 所说,它将参数显示为占位符。见php.net/manual/de/pdostatement.debugdumpparams.php以上是关于从 PDO 准备好的语句中获取查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SELECT PDO 准备好的语句中的 SELECT [重复]