當前位置: 首頁> 最新文章列表> 多個查詢時$errno 會覆蓋?如何正確使用?

多個查詢時$errno 會覆蓋?如何正確使用?

M66 2025-05-17

在使用PHP 進行數據庫操作時, mysqli擴展提供了用於查詢執行的功能。通過一個數據庫連接,我們可以執行多個SQL 查詢,但如果你執行多個查詢時,可能會遇到一個問題—— mysqli::$errno是否會被覆蓋?換句話說,多個查詢共用一個連接時,如何正確獲取每次的錯誤碼?

在這篇文章中,我們將討論mysqli::$errno是否會被覆蓋的問題,並給出如何在多個查詢之間正確獲取錯誤碼的解決方案。

1. mysqli::$errno是什麼?

mysqli::$errnomysqli類中的一個屬性,用於返回上一次查詢的錯誤碼。錯誤碼是一個數字,表示當前操作的狀態。如果值為0,則表示沒有錯誤發生。

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);

echo "錯誤碼: " . $mysqli->errno;
?>

在上面的代碼中, $mysqli->errno會返回最後一次查詢的錯誤碼。

2. 多個查詢共用一個連接時, mysqli::$errno會被覆蓋嗎?

如果你在同一連接上執行多個查詢, mysqli::$errno會在每次查詢之後更新為新的錯誤碼。因此,如果你在一個查詢後調用了$mysqli->errno ,然後執行下一個查詢, $mysqli->errno就會被新的錯誤碼覆蓋。

例如:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";

$mysqli->query($query1);
echo "第一个查询錯誤碼: " . $mysqli->errno . "<br>";

$mysqli->query($query2);
echo "第二个查询錯誤碼: " . $mysqli->errno . "<br>";
?>

運行上述代碼時, $mysqli->errno會在執行第一個查詢後返回第一個錯誤碼,但在執行第二個查詢時,它會被新的錯誤碼覆蓋。因此,你只能看到最後一個查詢的錯誤碼,而無法直接獲取每個查詢的錯誤碼。

3. 如何正確獲取每次的錯誤碼?

為了正確地獲取每個查詢的錯誤碼,你可以在每次查詢執行後,手動保存當前的錯誤碼。可以使用一個變量來記錄每次查詢的錯誤碼,從而避免被覆蓋的問題。

以下是改進後的代碼:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";

// 執行第一個查詢
$mysqli->query($query1);
$error_code1 = $mysqli->errno; // 保存第一个查询的錯誤碼
echo "第一个查询錯誤碼: " . $error_code1 . "<br>";

// 執行第二個查詢
$mysqli->query($query2);
$error_code2 = $mysqli->errno; // 保存第二个查询的錯誤碼
echo "第二个查询錯誤碼: " . $error_code2 . "<br>";
?>

在這個例子中,我們分別使用$error_code1$error_code2保存每次查詢的錯誤碼。這樣,每個查詢的錯誤碼就不會被覆蓋,而是被單獨記錄下來。

4. 結論

通過使用不同的變量保存每個查詢的錯誤碼,你可以確保即使多個查詢共用一個連接,錯誤碼也不會被覆蓋。這種做法避免了誤操作和數據丟失,從而可以更準確地調試和處理查詢錯誤。

希望本文能夠幫助你更好地理解mysqli::$errno的使用,並提供一個解決方案,使你能夠正確地獲取每個查詢的錯誤碼。