HOWTO · MySQLi

使用 MySQLi 錯誤函式顯示錯誤

如何使用 MySQLi 查詢以不同方式顯示錯誤。

本頁內容

MySQLi 是一個 PHP 函式,用於訪問 MySQL 資料庫伺服器。如果你有 MySQL 4.1.13 或更高版本,你可以使用這個擴充套件。

PHP 中,你可以使用各種 MySQLi 函式來執行不同的功能。在本文中,我們將學習 MySQLi 錯誤函式。

我們還將瞭解如何以及在何處使用程式碼示例並觀察輸出。對於本教程,我們將使用 MySQL 版本 8.0.27 和 PHP 版本 7.4.1。

PHP MySQLi 錯誤函式

在本教程中,我們將學習以下 PHPMySQLi 錯誤函式:

  • mysqli_error()
  • mysqli_errno()
  • mysqli_error_list()
  • mysqli_connect_error()
  • mysqli_connect_errno()

所有這些功能都可以在物件導向風格和過程風格中使用。讓我們使用 mysqli_error() 函式來理解這兩種語法。

物件導向風格的 mysqli_error() 函式的語法

string $mysqli->error;

程式風格的 mysqli_error() 函式的語法

string mysqli_error ( mysqli $link )

MySQL 中的 mysqli_error() 函式

此函式用於輸出最近一次函式呼叫(如果有)的最後一個錯誤描述。當你想知道 SQL 查詢是否有錯誤時使用它。

如果沒有錯誤,mysqli_error() 返回錯誤描述和空字串。請參閱以下示例。

使用程式樣式的示例程式碼:

<?php
    $host = "localhost";
    $username = "root";
    $password = "";
    $database = "person";

    $connection = mysqli_connect($host, $username, $password, $database) 
    or die("Connection Failed"); 

    $sql = "SELECT * FROM teacher";
    $result = mysqli_query($connection, $sql);
    $error_message = mysqli_error($connection);

    if($error_message == ""){
        echo "No error related to SQL query.";
    }else{
        echo "Query Failed: ".$error_message;
    }
    mysqli_close($connection);
?>

上面給出的程式碼嘗試使用 $host$username$password$database 變數建立連線,並將此連線儲存到 $connection 變數中。

mysqli_error() 函式將把這個連線變數 $connection 作為引數,檢查最近的 MySQLi 函式呼叫是否有錯誤,這裡是 mysqli_query($connection, $sql)

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_error 沒有錯誤

現在,將 SQL 查詢中的表名從 teacher 更改為 person 並觀察下面給出的輸出。

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 錯誤使用 mysqli_error

作為開發人員,我們很容易理解 person 資料庫中沒有 person 表(這就是上面錯誤中的意思)。

保持表名更改並替換行 $error_message = mysqli_error($connection);$error_message = $connection->error; 使用 MySQLi 錯誤函式來練習和理解物件導向的風格。

MySQL 中的 mysqli_errno() 函式

mysqli_errno() 的工作方式與 mysqli_error() 相同,但它會返回錯誤程式碼而不是錯誤描述。

編寫以下程式碼來練習和理解。你可能已經注意到,我們使用程式樣式來練習此功能。

<?php
     $host = "localhost";
     $username = "root";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed"); 

     $sql = "SELECT * FROM person";
     $result = mysqli_query($connection, $sql);
     $error_message = mysqli_errno($connection);

     if($error_message == ""){
     	echo "No error related to SQL query.";
     }else{
     	echo "Query Failed: ".$error_message;
     }
    mysqli_close($connection);
?>

上面給出的程式碼將顯示以下輸出,你將在其中看到一個數字作為錯誤程式碼。

輸出:

使用 msyqli 錯誤函式顯示錯誤 - 使用 mysqli_errno 時出錯

問題是,為什麼我們使用這個函式只顯示數字?因為如果要列印使用者友好的錯誤訊息(自定義訊息),可以在 if-else 語句中使用此錯誤程式碼。

請參閱下面的程式碼及其輸出。

<?php
     $host = "localhost";
     $username = "root";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed"); 

     $sql = "SELECT * FROM person";
     $result = mysqli_query($connection, $sql);
     $error_message = mysqli_errno($connection);

     if($error_message == 1146){
     	echo "You are trying to read the data from a table which doesn't exist in your 			database "."'".$database."'";
     }
    mysqli_close($connection);
?>

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_errno.png 自定義錯誤訊息

MySQL 中的 mysqli_error_list() 函式

此函式對於瞭解錯誤程式碼、SQL 狀態和錯誤描述非常有用,因為此函式返回一個包含所有必要資訊的陣列。

示例程式碼:

<?php
     $host = "localhost";
     $username = "root";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed"); 

     $sql = "SELECT * FROM person";
     $result = mysqli_query($connection, $sql);
     print_r(mysqli_error_list($connection));
     mysqli_close($connection);
?>

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_error_list 的錯誤列表

MySQL 中的 mysqli_connect_error() 函式

mysqli_connect_error() 返回上次連線的錯誤描述(如果有)。雖然 die() 函式也告訴我們連線不成功,但 mysqli_connect_error() 返回的錯誤我們很容易理解。

首先編寫以下程式碼,檢視其輸出,然後我們將其與 mysqli_connect_error() 產生的輸出進行比較。

<?php
     $host = "localhost";
     $username = "root";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed"); 

     $sql = "SELECT * FROM person";
     $result = mysqli_query($connection, $sql);
     $error_message = mysqli_error($connection);

     if($error_message != ""){
     	echo "Query Failed: ".$error_message;
      }
    mysqli_close($connection);
?>

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_connect_error 的錯誤部分 a

見上面給出的輸出;你可以看到我們能理解的錯誤在中間的某個地方。

想象一下,如果你有 2 或 3 個錯誤,就不容易找出來。現在,使用 mysqli_connect_error() 並使用以下程式碼和輸出檢視差異。

<?php
     $host = "localhost";
     $username = "newroot";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed: ".mysqli_connect_error()); 

     $sql = "SELECT * FROM teacher";
     $result = mysqli_query($connection, $sql);
     $error_message = mysqli_error($connection);

     if($error_message != ""){
     	echo "SQL Query Failed: ".$error_message;
    }
    mysqli_close($connection);
?>

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_connect_error 的錯誤部分 b

上面的輸出清楚地表明沒有名為 newroot 的使用者,它不允許你訪問資料庫。

MySQL 中的 mysqli_connect_errno() 函式

此函式的行為類似於 mysqli_connect_error(),但顯示錯誤程式碼而不是錯誤訊息。我們可以使用此錯誤程式碼來編寫自定義錯誤訊息。

示例程式碼:

<?php
     $host = "localhost";
     $username = "newroot";
     $password = "";
     $database = "person";

     $connection = mysqli_connect($host, $username, $password, $database) 
     or die("Connection Failed: ".mysqli_connect_errno()); 

     $sql = "SELECT * FROM teacher";
     $result = mysqli_query($connection, $sql);
     $error_message = mysqli_error($connection);

     if($error_message != ""){
	     echo "SQL Query Failed: ".$error_message;
     }
     mysqli_close($connection);
?>

輸出:

使用 mysqli 錯誤函式顯示錯誤 - 使用 mysqli_connect_errno 時出錯

まとめ

考慮到所有討論和示例,我們得出了兩個主要類別。第一類顯示有關 SQL 查詢的錯誤,另一類顯示有關資料庫連線的錯誤。

根據專案需要,我們可以列印每個類別的錯誤資訊或錯誤程式碼。