有没有办法检索用于生成PDO Prepared语句对象的查询?
答案 0 :(得分:31)
答案 1 :(得分:9)
如果您不反对扩展默认的\ PDO和\ PDOStatement对象,您可以考虑查看:
github.com/noahheck/E_PDOStatement
PDO的这个扩展允许您查看完整的查询语句,作为可能在数据库级别执行的操作的示例。它使用正则表达式来插入PDO语句的绑定参数。
通过扩展默认的\ PDOStatement定义,E_PDOStatement能够为默认功能提供此增强功能,而无需修改您的正常工作流程。
免责声明:我创建了此扩展程序。
我希望它对别人有帮助。
答案 2 :(得分:1)
实现所需目标的最简单方法是:
$statement->debugDumpParams();
只需确保在执行语句后添加它即可。
答案 3 :(得分:0)
自我推销:https://github.com/ellisgl/GeekLab-GLPDO 您可以使用调试方法输出预期查询的内容。我最近一直在更新它。
答案 4 :(得分:0)
此过程有效。由于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;
希望这会有所帮助。