Php 是否有方法打印将在pdo上执行的sql->;犯罪
我有一个脚本,能够建立一个准备好的语句的长事务,我希望有一种打印即将执行的内容的方法 PDO中没有一个项目看起来很有希望 编辑: 这是一个(黑客)数据库升级脚本,作为一个健全的检查。开发者应该在修改数据库时附加到脚本中Php 是否有方法打印将在pdo上执行的sql->;犯罪,php,pdo,Php,Pdo,我有一个脚本,能够建立一个准备好的语句的长事务,我希望有一种打印即将执行的内容的方法 PDO中没有一个项目看起来很有希望 编辑: 这是一个(黑客)数据库升级脚本,作为一个健全的检查。开发者应该在修改数据库时附加到脚本中 $commonStmt = $pdo->prepare("INSERT ... VALUES (:a, :b)"); function commonInsert($a, $b) { global $commonStmt; $commonStmt->bi
$commonStmt = $pdo->prepare("INSERT ... VALUES (:a, :b)");
function commonInsert($a, $b) {
global $commonStmt;
$commonStmt->bindParam(':a', $a);
$commonStmt->bindParam(':b', $b);
$commonStmt->execute();
}
$pdo->beginTransaction();
if ($db_version < $file_version) {
commonInsert('a', 'b');
}
if ($db_version < $file_version) {
commonInsert('c', 'd');
}
if ($db_version < $file_version) {
$stmt = $pdo->prepare('INSERT ...');
$stmt->execute();
}
if ($db_version < $file_version) {
$pdo->query('INSERT');
}
// this will only get longer
$pdo->commit();
$commonStmt=$pdo->prepare(“插入…值(:a,:b)”);
函数commonInsert($a,$b){
全球TMT;
$commonStmt->bindParam(':a',$a);
$commonStmt->bindParam(':b',$b);
$commonStmt->execute();
}
$pdo->beginTransaction();
如果($db\U版本<$file\U版本){
共同插入('a','b');
}
如果($db\U版本<$file\U版本){
commonInsert('c','d');
}
如果($db\U版本<$file\U版本){
$stmt=$pdo->prepare('INSERT…');
$stmt->execute();
}
如果($db\U版本<$file\U版本){
$pdo->query('INSERT');
}
//这只会变得更长
$pdo->commit();
我可以在每个更新中添加调试语句(根据Tamas的建议),但对于一个简单的健全性检查来说,这似乎很繁重。而且
commonInsert
案例是最不可能需要它的案例。怎么样?如果数据库驱动程序支持准备好的语句,那么就没有什么可打印的了。PDO并没有拼凑一个老式的SQL语句,它通过两个单独的步骤将查询和绑定数据发送到数据库。这是否有助于/回答/废弃您的问题?如果它在单独的步骤中完成这项工作,这意味着它没有保留足够的元信息来完成我想做的事情,那么是的。尽管这是为了进行健全性检查(而不是生成格式良好的sql),我还是愿意处理类似PDOStatement::debugDumpParams的输出,但对于整个事务来说。PDO只是一个层,它不会“跟踪”beginTransaction和commit之间执行的内容。它发生在数据库级别,因此如果您想要调试输出,您需要在PHP级别的每次执行中都进行调试。谢谢,Tamas。这是有道理的,如果这对内省来说有点不幸的话。这接近我想要的,但不幸的是,由于它是在语句级别运行的,所以它对我的案例并不起作用。我已经更新了我的问题来说明原因。再想一想,因为这主要是为了调试,并且repo中的内容应该是安全的,所以我可以告诉devs“插入您自己的调试语句”