Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有方法打印将在pdo上执行的sql->;犯罪_Php_Pdo - Fatal编程技术网

Php 是否有方法打印将在pdo上执行的sql->;犯罪

Php 是否有方法打印将在pdo上执行的sql->;犯罪,php,pdo,Php,Pdo,我有一个脚本,能够建立一个准备好的语句的长事务,我希望有一种打印即将执行的内容的方法 PDO中没有一个项目看起来很有希望 编辑: 这是一个(黑客)数据库升级脚本,作为一个健全的检查。开发者应该在修改数据库时附加到脚本中 $commonStmt = $pdo->prepare("INSERT ... VALUES (:a, :b)"); function commonInsert($a, $b) { global $commonStmt; $commonStmt->bi

我有一个脚本,能够建立一个准备好的语句的长事务,我希望有一种打印即将执行的内容的方法

PDO中没有一个项目看起来很有希望

编辑: 这是一个(黑客)数据库升级脚本,作为一个健全的检查。开发者应该在修改数据库时附加到脚本中

$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“插入您自己的调试语句”