# PHP MySQLi錯誤信息如何獲取
在使用PHP與MySQL數據庫交互時,MySQLi擴展是常用的工具之一。然而,在操作過程中難免會遇到各種錯誤。本文將詳細介紹如何通過MySQLi獲取錯誤信息,幫助開發者快速定位和解決問題。
## 一、MySQLi錯誤信息的基本獲取方式
### 1. 連接錯誤信息獲取
當使用`mysqli_connect()`或`new mysqli()`建立連接失敗時,可以通過以下方式獲取錯誤信息:
```php
$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
或者使用過程化風格:
$conn = mysqli_connect("localhost", "username", "password", "database");
if (!$conn) {
die("連接失敗: " . mysqli_connect_error());
}
執行SQL語句時出現錯誤,可以通過以下方式獲?。?/p>
$sql = "SELECT * FROM non_existent_table";
$result = $conn->query($sql);
if (!$result) {
echo "錯誤代碼: " . $conn->errno . "<br>";
echo "錯誤信息: " . $conn->error;
}
過程化風格:
$result = mysqli_query($conn, $sql);
if (!$result) {
echo "錯誤代碼: " . mysqli_errno($conn) . "<br>";
echo "錯誤信息: " . mysqli_error($conn);
}
MySQLi支持異常模式,可以更優雅地處理錯誤:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$conn = new mysqli("localhost", "username", "password", "database");
$result = $conn->query("SELECT * FROM non_existent_table");
} catch (mysqli_sql_exception $e) {
echo "捕獲到異常: " . $e->getMessage();
echo "錯誤代碼: " . $e->getCode();
}
對于預處理語句,錯誤處理稍有不同:
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
echo "準備語句失敗: " . $conn->error;
exit;
}
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
echo "執行失敗: " . $stmt->error;
exit;
}
將錯誤信息記錄到日志文件中:
$result = $conn->query($sql);
if (!$result) {
$error = date("[Y-m-d H:i:s]") . " MySQL錯誤: " . $conn->error . "\n";
file_put_contents('mysql_errors.log', $error, FILE_APPEND);
// 同時顯示用戶友好信息
echo "操作失敗,請稍后再試";
}
開發環境下可以收集更詳細的調試信息:
function debug_mysql_error($conn, $sql = '') {
$output = "SQL錯誤\n";
$output .= "查詢: " . $sql . "\n";
$output .= "錯誤碼: " . $conn->errno . "\n";
$output .= "錯誤信息: " . $conn->error . "\n";
$output .= "調用堆棧:\n" . print_r(debug_backtrace(), true);
error_log($output);
return $output;
}
mysqli_report(MYSQLI_REPORT_ALL)
掌握MySQLi錯誤信息的獲取方法是PHP數據庫開發的基本功。通過合理利用錯誤信息,可以快速定位問題,提高開發效率。建議結合異常處理和日志記錄,構建健壯的數據庫操作代碼。
提示:MySQLi還提供了
mysqli_warning
相關函數用于處理警告信息,在某些情況下也很有用。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。