try/catchエラーの完全なSQLステートメントを識別しようとしています。ループされたSQLステートメントのtry/catch
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文を(log_event関数を介して)ログファイルに記録します。これは、エラー(不適切なSQL文)を生成しますが、私の問題は、エラーメッセージがジェネリックであるということです。私は問題を見ることができます
2017-08-25 09:19:28 - submit_scores.php: Failed: SQLSTATE[42000]: Syntax
error or access violation: 1064 You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near ',210,, ,,, )' at line 4
が、私は、ループ内のすべてのSQL文をログに記録しないことを好むだろう失敗したFULL SQL文を単に記録してください。
ご協力いただければ幸いです。
内部で何を '$ sqlを[$カウンターを] '?そして、あなたは別のクエリを実行する*と*を実行していますか? – Qirel