在PHP 中使用PDO(PHP Data Objects)進行數據庫操作時, exec()方法常用於執行不返回結果集的SQL 語句,例如INSERT 、 UPDATE 、 DELETE等。但在開發和調試過程中,往往需要更詳細的錯誤信息來排查問題。本文將介紹如何在使用PDO::exec時開啟並查看詳細的錯誤報告。
PDO::exec方法執行一條SQL 語句,並返回受影響的行數。如果執行失敗,它返回false 。但默認情況下,錯誤信息不會自動輸出,需要手動開啟錯誤模式並獲取錯誤詳情。
<?php
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
if ($result === false) {
echo "執行失敗,但沒有詳細錯誤信息。";
} else {
echo "影響了 {$result} 行。";
}
?>
PDO 支持多種錯誤處理模式,最常用的有:
PDO::ERRMODE_SILENT :默認模式,不拋出錯誤,只記錄錯誤代碼。
PDO::ERRMODE_WARNING :觸發PHP 警告。
PDO::ERRMODE_EXCEPTION :拋出異常。
我們推薦使用PDO::ERRMODE_EXCEPTION ,這樣可以通過捕獲異常獲得詳細的錯誤信息。
<?php
try {
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
echo "影響了 {$result} 行。";
} catch (PDOException $e) {
echo "執行出錯: " . $e->getMessage();
}
?>
如果你不使用異常模式,可以通過以下方法查看錯誤信息:
<?php
$pdo = new PDO('mysql:host=m66.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$sql = "UPDATE users SET status = 'active' WHERE id = 10";
$result = $pdo->exec($sql);
if ($result === false) {
$errorInfo = $pdo->errorInfo();
echo "錯誤代碼: " . $errorInfo[0] . "<br>";
echo "驱动錯誤代碼: " . $errorInfo[1] . "<br>";
echo "錯誤訊息: " . $errorInfo[2];
} else {
echo "影響了 {$result} 行。";
}
?>
errorInfo()返回一個數組:
[0] SQLSTATE 錯誤代碼(標準錯誤碼)
[1]驅動特定錯誤代碼
[2]驅動具體錯誤消息
調試階段建議開啟PDO::ERRMODE_EXCEPTION ,方便捕獲異常並定位錯誤。
生產環境考慮捕獲異常後進行日誌記錄,避免直接輸出錯誤信息給用戶。
確認數據庫連接字符集設置正確,避免因字符編碼導致的錯誤。
使用預處理語句( prepare + execute )以防止SQL 注入,同時也便於錯誤排查。
通過上述方法,你可以在使用PDO::exec時輕鬆開啟並查看詳細的錯誤報告,有效提升調試效率,快速定位問題。
相關標籤:
PDO