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 查询的错误,另一类显示有关数据库连接的错误。

根据项目需要,我们可以打印每个类别的错误信息或错误代码。