Php try/catch用于循环SQL语句
我试图识别try/catch失败的完整SQL语句。代码如下:Php try/catch用于循环SQL语句,php,loops,pdo,try-catch,Php,Loops,Pdo,Try Catch,我试图识别try/catch失败的完整SQL语句。代码如下: try { $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->beginTransaction(); for($counter=0;$counter<sizeof($sql);$counter++) { $query = $conn->prepare($sql[$counter]
try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
for($counter=0;$counter<sizeof($sql);$counter++) {
$query = $conn->prepare($sql[$counter]);
$conn->exec($sql[$counter]);
}
$conn->commit();
} catch (Exception $e) {
$err_message = "Failed while saving process....";
log_event('submit_scores.php', $err_message);
$err_message = "The following SQL statements were in the queue:";
log_event('submit_scores.php', $err_message);
for($counter=0;$counter<sizeof($sql);$counter++) {
/* \t should be a tab character to indent the sql statements */
$err_message = "\t" . $sql[$counter];
log_event('submit_scores.php', $err_message);
}
$conn->rollBack();
$message = "Failed: " . $e->getMessage();
echo $message;
$err_message = "\t" . $message;
log_event('submit_scores.php', $err_message);
return;
}
我可以看到这个问题,但我不希望记录循环中的每个SQL语句,而只是记录失败的完整SQL语句
任何帮助都将不胜感激。您不应在
catch
块中重复使用$counter
变量和/或循环所有sql语句:您知道在引发异常时失败的最后一条语句是$sql[$counter]
因此,您不应该循环遍历所有语句,而应该只记录
$sql[$counter]
您不应该在catch
块中重复使用$counter
变量和/或循环遍历所有sql语句:您知道失败的最后一条语句是$sql[$counter]
此时抛出异常
因此,不要循环遍历所有语句,您应该只记录
$sql[$counter]
,因为异常是由->exec()
调用引发的,您可以将try
/catch
移动到循环中,然后只引用您调用的上一次尝试查询:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
for($counter=0;$counter<sizeof($sql);$counter++) {
try {
$query = $conn->prepare($sql[$counter]);
$conn->exec($sql[$counter]);
} catch (Exception $e) {
echo "This is the query ($counter) that failed: " . $sql[$counter];
$conn->rollBack();
return;
}
}
$conn->commit();
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$conn->beginTransaction();
对于($counter=0;$counterprepare($sql[$counter]);
$conn->exec($sql[$counter]);
}捕获(例外$e){
echo“这是失败的查询($counter):.$sql[$counter];
$conn->rollBack();
返回;
}
}
$conn->commit();
由于异常是由->exec()
调用引发的,因此可以将try
/catch
移动到循环中,然后只引用上次调用的查询:
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
for($counter=0;$counter<sizeof($sql);$counter++) {
try {
$query = $conn->prepare($sql[$counter]);
$conn->exec($sql[$counter]);
} catch (Exception $e) {
echo "This is the query ($counter) that failed: " . $sql[$counter];
$conn->rollBack();
return;
}
}
$conn->commit();
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$conn->beginTransaction();
对于($counter=0;$counterprepare($sql[$counter]);
$conn->exec($sql[$counter]);
}捕获(例外$e){
echo“这是失败的查询($counter):.$sql[$counter];
$conn->rollBack();
返回;
}
}
$conn->commit();
在$sql[$counter]
里面是什么?你们都在准备和执行一个单独的查询?在$sql[$counter]
里面是什么?你们都在准备和执行一个单独的查询?