PHPでMySQLデータベースを使用する場合、SQLクエリの実行時にエラーが発生する可能性があります。これらのエラーの配置を容易にするために、 mysqli :: $ errnoによって提供されるエラーコードを使用して、障害の原因を決定し、それに応じて処理できます。この記事では、MySQLI :: $ errnoを使用して、さまざまなタイプのSQL実行障害を自動的に識別およびテストする方法を紹介します。
mysqli :: $ errnoは、最近実行されたMySQLクエリのエラーコードを含む属性です。異なるタイプのエラーを表す整数値を返します。これは開発者にとって非常に便利であり、SQLを実行するときに問題を見つけるのに役立ちます。
通常、 mysqli :: $ errnoとmysqli :: $ errorが一緒に使用され、後者はエラーが発生したときにエラーメッセージを返し、前者はエラーの特定のエラーコードを提供します。この情報を通じて、SQLエラーはそれに応じて処理できます。
いくつかの一般的なmysqlエラーコードの例とその意味を次に示します。
エラーコード | エラーの説明 |
---|---|
1045 | 拒否されたアクセス(アクセス許可なし) |
1064 | SQL構文エラー |
1146 | テーブルは存在しません |
1054 | 列は存在しません |
1062 | 重複するエントリ(一意の制約違反) |
SQLクエリを実行すると、 mysqli :: $ errnoを介してこれらのエラーコードを確認し、それに応じて処理できます。
まず、MySQLデータベースに接続するインスタンスが必要で、SQLクエリを実行してエラーがあるかどうかを確認します。これがサンプルコードです:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$query = "SELECT * FROM non_existent_table"; // 意図的に書かれた間違ったテーブル名
$result = $mysqli->query($query);
if (!$result) {
// クエリが失敗した場合,エラーコードとエラー情報を取得します
echo "エラーコード: " . $mysqli->errno . "<br>";
echo "エラーメッセージ: " . $mysqli->error . "<br>";
// 根据エラーコード做不同的处理
switch ($mysqli->errno) {
case 1045:
echo "アクセス許可はありません,データベースユーザーの許可を確認してください。";
break;
case 1064:
echo "SQL 構文エラー,クエリの構文を確認してください。";
break;
case 1146:
echo "テーブルは存在しません,テーブル名を確認してください。";
break;
case 1054:
echo "列は存在しません,列名を確認してください。";
break;
case 1062:
echo "エントリを繰り返します,一意の制約の違反。";
break;
default:
echo "その他のエラー,チェックしてください。";
}
} else {
// クエリが成功しました,処理結果
while ($row = $result->fetch_assoc()) {
echo "データ: " . $row['column_name'] . "<br>";
}
}
$mysqli->close();
?>
上記のコードでは、SQL実行が失敗した場合、エラーコードとエラーメッセージが最初に印刷されます。次に、 mysqli :: $ errnoの値に基づいて、スイッチステートメントを介してエラータイプを判断し、特定のエラープロンプトを提供します。
意図的にエラーを導入することにより、mysqli :: $ errnoの効果をテストできます。たとえば、次の一般的なエラーを試すことができます。
エラーテーブル名:クエリテーブルが存在しない場合、MySQLはエラーコード1146を返します(テーブルは存在しません)。
エラーSQL構文:構文エラーは通常1064エラーコードを返します。
許可の問題:データベースユーザーに十分な権限がない場合、エラーコード1045が返されます。
テスト中、SQLクエリステートメントを変更してこれらのエラーをトリガーし、 MySqli :: $ errnoを介して対応するエラーコードを取得できます。
一部の複雑なSQLクエリでは、URLまたは外部データソースを使用する場合があります。外部リソースがクエリに関与している場合、次のような方法を使用して、URLが有効かどうかを確認できます。
関連タグ:
SQL