MySQLi エラー関数を使用してエラーを表示する
MySQLi は、MySQL データベースサーバーにアクセスするために使用される PHP 関数です。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_query($connection, $sql) である最近の MySQLi 関数呼び出しによって引き起こされたエラーがあるかどうかをチェックします。
出力:

次に、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);
?>
出力:

まとめ
すべての議論と例を考慮して、2つの主要なカテゴリーを結論付けました。最初のカテゴリは SQL クエリに関するエラーを示し、他のカテゴリはデータベース接続に関するエラーを示します。
プロジェクトのニーズに応じて、各カテゴリのエラーメッセージまたはエラーコードを出力できます。
