使用 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 查询的错误,另一类显示有关数据库连接的错误。
根据项目需要,我们可以打印每个类别的错误信息或错误代码。