PHPでは、 MySQLI拡張機能を使用してMySQLデータベースと対話する場合、いくつかの一般的なエラーに遭遇する可能性があります。これらのエラーの場合、問題を診断するのに役立つMysqli :: $ errnoを介してエラーコードを取得できます。特に、データベース接続エラーとSQL構文エラーを区別することが重要です。この記事では、mysqli :: $ errnoを使用してこれら2つのエラーを区別する方法について説明します。
データベース接続エラーは通常、データベースに接続しようとするときに発生します。データベースサーバーにアドレス、ユーザー名、パスワード、またはデータベース名にエラーがある場合、接続は失敗します。この場合、 mysqli :: $ errnoは特定のエラーコードを返し、このコードに基づいて問題を判断できます。
<?php
$host = 'localhost'; // データベースサーバーアドレス
$user = 'root'; // データベースのユーザー名
$password = ''; // データベースパスワード
$database = 'test'; // データベース名
// データベース接続を作成します
$conn = new mysqli($host, $user, $password, $database);
// 接続が成功しているかどうかを確認してください
if ($conn->connect_errno) {
echo "接続エラー: " . $conn->connect_error;
// によるとerrnoエラータイプを決定します
if ($conn->connect_errno == 1049) {
echo "データベースは存在しません!";
} elseif ($conn->connect_errno == 1045) {
echo "間違ったユーザー名またはパスワード!";
}
exit();
}
echo "データベースに正常に接続します!";
?>
この例では、データベース接続が失敗した場合、 $ conn-> connect_errnoはエラーコードを返します。たとえば、エラーコード1049はデータベースが存在しないことを示し、エラーコード1045はユーザー名またはパスワードが間違っていることを示します。これらのエラーコードを使用すると、問題をより正確に見つけることができます。
SQLクエリを実行すると、SQL構文エラーによりクエリが失敗する可能性があります。現時点では、 mysqli :: $ errnoは、 SQLエラーに関連するコードを返します。エラーコードを判断することにより、SQL構文エラーかその他のタイプのエラーかをすばやく区別できます。
<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'test';
// データベース接続を作成します
$conn = new mysqli($host, $user, $password, $database);
// 構文エラーを実行しますSQLクエリ
$sql = "SELEC * FROM users"; // 間違い的クエリ:SELEC あるべきです SELECT
$result = $conn->query($sql);
// 診るSQL実行が成功したかどうか
if ($result === false) {
echo "SQL間違い: " . $conn->error;
// 判断間違い代码
if ($conn->errno == 1064) {
echo "SQL语法間違い!";
}
exit();
}
echo "クエリ成功!";
?>
この例では、SQLクエリには構文エラー( SELECが選択される必要があります)があり、 $ conn-> errnoは1064を返し、SQL構文エラーを示します。 mysqli :: $ errnoの値を判断することにより、SQLクエリの問題をすばやく見つけることができます。
MySQLI :: $ ERRNOは、データベース接続エラーをSQL構文エラーと区別する効果的な方法を提供します。返されたエラーコードを確認することにより、問題をすばやく診断し、デバッグ時間を短縮できます。
データベース接続エラー: Connect_Errnoは通常、接続が成功しているかどうかを確認し、エラーコード(ユーザー名またはパスワードエラーなど、データベースが存在しないなど)で異なる接続エラーを区別します。
SQL構文エラー:SQLクエリに問題がある場合、 $ conn-> errnoで返されるエラーコードは、構文エラーを認識するのに役立ちます。
これらの2つのエラー処理方法は、データベースの操作をより適切に管理およびデバッグし、コードの堅牢性を向上させるのに役立ちます。