使用 MySQLi 错误函数显示错误

Mehvish Ashiq 2024年2月15日
  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
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