當前位置: 首頁> 最新文章列表> 為什麼$errno 總是0,但查詢卻沒有成功?

為什麼$errno 總是0,但查詢卻沒有成功?

M66 2025-05-30

在使用PHP 與MySQL 進行數據庫操作時, mysqli擴展是一個常見的選擇。對於調試數據庫查詢中的錯誤, mysqli::$errnomysqli::$error是非常有用的工具。它們可以幫助開發者獲取數據庫錯誤代碼和錯誤信息。然而,有時開發者可能會遇到這樣的情況: mysqli::$errno返回0,但查詢操作依然失敗。那麼,為什麼會出現這種情況呢?下面我們來深入探討一下。

1. mysqli::$errno的作用

mysqli::$errno屬性包含了上一次MySQL 操作中發生的錯誤代碼。通常, 0表示沒有發生錯誤,而非零值則表示發生了某些錯誤。這是MySQL 數據庫系統中的錯誤代碼,與mysqli::$error一起,可以幫助我們快速定位問題。

2. mysqli::$errno返回0 的情況

儘管查詢失敗, mysqli::$errno仍然返回0 ,這種情況可能是由於以下幾個原因:

2.1 SQL 查詢本身沒有產生MySQL 錯誤

mysqli::$errno只會返回MySQL 服務端的錯誤代碼。如果你的查詢沒有觸發MySQL 錯誤(比如語法錯誤、連接問題等),那麼mysqli::$errno可能仍然為0 。這時需要注意,即便查詢返回結果為空,也並不代表MySQL 執行過程中出現了錯誤。

舉個例子,當查詢沒有匹配到任何結果時,MySQL 並不會返回錯誤,而是簡單地返回空結果集,這時mysqli::$errno仍為0 ,查詢本身並沒有失敗。

2.2 使用了非錯誤類型的SQL 查詢

有些SQL 查詢(如INSERTUPDATEDELETE )可能執行成功,但影響的行數為0 ,即沒有實際修改數據庫中的數據。雖然這不是一個錯誤,但開發者可能認為查詢沒有成功,從而導致誤解。為了更好地判斷是否成功,可以通過檢查mysqli_affected_rows()來確認是否有行被影響。

2.3 數據庫連接問題

有時,數據庫連接可能已失效或者在查詢前已經斷開,而mysqli::$errno並沒有立即返回錯誤。你可以通過檢查mysqli::$connect_errno來確認數據庫連接是否正常。

3. 如何調試這種問題?

當你發現mysqli::$errno始終返回0 ,但查詢仍然失敗時,可以採取以下方法進行調試:

3.1 使用mysqli::$error來獲取更多信息

mysqli::$error屬性包含了與當前操作相關的MySQL 錯誤信息,即便mysqli::$errno返回0 ,你仍然可以通過mysqli::$error來獲取一些線索。即便errno0error可能會給出一些額外的提示。

 if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

3.2 檢查SQL 語句

確保你的SQL 查詢沒有語法錯誤或邏輯錯誤。可以將查詢打印出來,並在數據庫管理工具(如phpMyAdmin)中直接執行它,看看是否返回預期結果。

3.3 查看影響的行數

對於INSERTUPDATEDELETE查詢,執行後應檢查mysqli_affected_rows()函數返回的結果。如果返回0 ,說明雖然查詢執行了,但沒有任何數據被修改。

 $affected_rows = $mysqli->affected_rows;
if ($affected_rows === 0) {
    echo "No rows were affected by the query.<br>";
}

3.4 檢查數據庫連接

如果懷疑是數據庫連接問題,可以使用mysqli_connect_errno()來檢查數據庫連接是否成功。

 if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

4. 小結

當使用mysqli::$errno時,如果它返回0 ,但查詢依然失敗,可能是查詢沒有產生MySQL 錯誤、查詢沒有修改任何數據,或者存在其他類型的問題而不是MySQL 錯誤。要解決這個問題,開發者應結合mysqli::$errormysqli_affected_rows()等工具,進行綜合調試。通過這些步驟,你可以更有效地識別並解決數據庫查詢中的問題。

 // 連接數據庫
$mysqli = new mysqli("localhost", "username", "password", "database");

// 查詢
$query = "SELECT * FROM some_table WHERE id = 1";
$result = $mysqli->query($query);

// 結果處理
if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

// 關閉連接
$mysqli->close();