MySQLi 準備語句:錯誤處理說明
在 MySQLi 中使用準備語句時,可能不清楚如何最好地處理錯誤報告。本文旨在闡明正確的錯誤處理方法。
prepare() 的回傳值與execute()
prepare() 的回傳值只指示是否SQL語句準備成功。它不檢測執行錯誤。因此,還需要檢查execute()的回傳值。
範例:
if ($stmt_test->prepare("INSERT INTO testtable VALUES (23,44,56)")) { if ($stmt_test->execute()) { echo "Statement executed successfully."; } else { echo("Execution failed: " . $stmt_test->error . "<br>"); } $stmt_test->close(); } else { echo("Statement preparation failed: " . $stmt_test->error . "<br>"); }
附加錯誤檢查
雖然execute()的回傳值可以處理大多數錯誤,但也建議檢查執行後語句的errno 屬性。這可確保捕獲執行期間可能發生的任何錯誤。
範例:
if ($stmt_test->execute()) { if (!$stmt_test->errno) { echo "Statement executed successfully."; } else { echo("Additional error occurred: " . $stmt_test->error . "<br>"); } $stmt_test->close(); } else { echo("Execution failed: " . $stmt_test->error . "<br>"); }
簡化的錯誤回報
為了大幅簡化錯誤報告,您也可以使用mysqli_report () 函數。透過設定 MYSQLI_REPORT_ERROR 和 MYSQLI_REPORT_STRICT 標誌,所有 MySQLi 錯誤都會報告為 PHP 例外。
範例:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)"); $stmt->bind_param('iii', $x, $y, $z); $stmt->execute();
此方法無需明確錯誤檢查在你的程式碼中。
以上是如何正確處理MySQLi準備語句中的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!