使用 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)
。
輸出:
現在,將 SQL
查詢中的表名從 teacher
更改為 person
並觀察下面給出的輸出。
輸出:
作為開發人員,我們很容易理解 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);
?>
上面給出的程式碼將顯示以下輸出,你將在其中看到一個數字作為錯誤程式碼。
輸出:
問題是,為什麼我們使用這個函式只顯示數字?因為如果要列印使用者友好的錯誤訊息(自定義訊息),可以在 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);
?>
輸出:
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);
?>
輸出:
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);
?>
輸出:
見上面給出的輸出;你可以看到我們能理解的錯誤在中間的某個地方。
想象一下,如果你有 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);
?>
輸出:
上面的輸出清楚地表明沒有名為 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);
?>
輸出:
まとめ
考慮到所有討論和示例,我們得出了兩個主要類別。第一類顯示有關 SQL 查詢的錯誤,另一類顯示有關資料庫連線的錯誤。
根據專案需要,我們可以列印每個類別的錯誤資訊或錯誤程式碼。