MySQLI拡張機能は、データベース操作にPHPを使用する場合、非常に一般的なツールです。ただし、一部の開発者は、MySqli :: $ errnoがエラーを処理するときにエラーをキャッチできない状況に遭遇する場合があります。多くの場合、これはコード自体の問題ではなく、MySQLIオブジェクトインスタンスが誤って使用されているためです。
この記事では、MySQLIエラーキャプチャメカニズムを詳細に調査し、 MySQLI :: $ ERRNOがエラーをキャッチしない理由を分析し、それらを使用する正しい方法を提供します。
まず、データベースに接続する方法を簡単に確認し、mysqliを使用してクエリを実行します。通常、次のコードを使用して、データベース接続を確立します。
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'test_db';
// 作成する MySQLi オブジェクトインスタンス
$mysqli = new mysqli($host, $username, $password, $dbname);
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
?>
このコードは、新しいMySqli()を介して新しいMySqliオブジェクトインスタンス$ mySqliを作成し、接続が失敗したときにエラーメッセージを出力します。
後続のコードでクエリを実行して問題を抱えている場合、 $ mysqli-> errnoおよび$ mysqli->エラーは、エラーをキャッチして診断するのに役立ちます。
MySqliでは、 $ ERRNOが最後のエラーコードを保存するために使用され、 $エラーはエラーの説明を保存します。通常、次の方法でエラーをキャッチできます。
<?php
$sql = "SELECT * FROM non_existent_table"; // 意図的にテーブル名を書いた
$result = $mysqli->query($sql);
if ($mysqli->errno) {
echo "MySQL 間違い: " . $mysqli->error;
} else {
// プロセスクエリの結果
}
?>
このコードでは、存在しないテーブルを意図的に照会します。クエリが失敗した場合、 $ mysqli-> errnoはエラーコードをキャッチし、 $ mysqli->エラーはエラーメッセージが表示されます。
それでは、なぜMySqli :: $ errnoがエラーをキャッチできない状況に遭遇することがあるのですか?最も一般的な理由の1つは、複数のMySQLIオブジェクトインスタンスが誤って使用されること、またはクエリが作成されたときにエラーが正しくチェックされないことです。
たとえば、このようなmysqliを使用する場合:
<?php
// 間違い的用法:正しい使用はありません MySQLi オブジェクトインスタンス
$mysqli1 = new mysqli($host, $username, $password, $dbname);
$mysqli2 = new mysqli($host, $username, $password, $dbname);
$sql = "SELECT * FROM non_existent_table";
$result = $mysqli1->query($sql); // 使用 $mysqli1 クエリ
// 使用間違い的实例来检查間違い
if ($mysqli2->errno) { // 間違い!使用する必要があります $mysqli1 来检查間違い
echo "MySQL 間違い: " . $mysqli2->error;
}
?>
上記のコードでは、2つのmysqliオブジェクト$ mysqli1と$ mysqli2を作成しましたが、クエリを実行するときは$ mysqli1を使用し、エラーチェックは$ mysqli2を使用しました。 $ mysqli2はクエリを実行しないため、エラーは発生しません。
エラーを正しくキャッチできるようにするには、クエリとチェックエラーを実行するには、常に同じmysqliオブジェクトインスタンスを使用する必要があります。修正されたコードは次のとおりです。
<?php
$mysqli = new mysqli($host, $username, $password, $dbname);
$sql = "SELECT * FROM non_existent_table"; // 意図的にテーブル名を書いた
$result = $mysqli->query($sql);
if ($mysqli->errno) {
echo "MySQL 間違い: " . $mysqli->error;
} else {
// プロセスクエリの結果
}
?>
この変更された例では、1つのmysqliオブジェクトインスタンス$ mysqliのみを使用します。これは、クエリを実行するか、エラーをキャッチするかにかかわらず行われます。このようにして、エラーコードとエラーメッセージを正しくキャプチャできます。
プロジェクト内のデータベースまたは外部リソースへのアクセス(APIを介して外部サービスに接続するなど)を使用する場合、URLを使用できます。お客様の要件を満たすために、 M66.NETに表示されるすべてのURLドメインを単純に置き換えることができます。
<?php
$api_url = "https://api.m66.net/endpoint";
$response = file_get_contents($api_url);
?>
このようにして、異なるドメイン名を含めた可能性のあるすべてのURLは、 M66.NETドメイン名に統一され、お客様のニーズを確実に満たすことができます。
mysqli :: $ errnoは、 mysqliオブジェクトインスタンスの使用が誤っていないため、エラーをキャッチできません。開発プロセス中は、必ず次のようにしてください。
クエリとエラーチェック用のMySQLIオブジェクトインスタンスは1つだけです。
$ mysqli-> errnoおよび$ mysqli->エラーを使用して、エラーをキャッチして処理します。
URLのドメイン名が外部リソースまたはAPI呼び出しを伴うときに正しいことを確認してください。
これらの原則に従うことができれば、一貫性のないオブジェクトインスタンスによって引き起こされる問題を効果的に回避し、mysqliエラーキャプチャメカニズムが正常に機能することを確認できます。
関連タグ:
MySQLi