使用 MySQLi 錯誤函式顯示錯誤

Mehvish Ashiq 2023年1月30日 2022年5月13日
  1. PHP MySQLi 錯誤函式
  2. まとめ
使用 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 查詢的錯誤,另一類顯示有關資料庫連線的錯誤。

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

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook