現在の位置: ホーム> 最新記事一覧> 複数のクエリの場合、$ errnoは上書きしますか?正しく使用する方法は?

複数のクエリの場合、$ errnoは上書きしますか?正しく使用する方法は?

M66 2025-05-17

データベース操作にPHPを使用する場合、 MySQLI拡張機能はクエリ実行に機能を提供します。データベース接続を使用すると、複数のSQLクエリを実行できますが、複数のクエリを実行すると、問題が発生する可能があります。言い換えれば、複数のクエリが接続を共有する場合、毎回エラーコードを正しく取得するにはどうすればよいですか?

この投稿では、 mysqli :: $ errnoが上書きされるかどうかの問題について説明し、複数のクエリ間でエラーコードを正しく取得する方法のソリューションを提供します。

1. mysqli :: $ errnoとは何ですか?

mysqli :: $ errnoは、最後のクエリのエラーコードを返すMySqliクラスのプロパティです。エラーコードは、現在の操作のステータスを示す数字です。値が0の場合、エラーは発生しませんでした。

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);

echo "エラーコード: " . $mysqli->errno;
?>

上記のコードでは、 $ mysqli-> errnoが最後のクエリのエラーコードを返します。

2。mysqli :: $ errnoは、複数のクエリが1つの接続を共有するときに上書きされますか?

同じ接続で複数のクエリを実行すると、 mysqli :: $ errnoが各クエリの後に新しいエラーコードに更新されます。したがって、クエリ後に$ mysqli-> errnoを呼び出してから次のクエリを実行すると、 $ mysqli-> errnoは新しいエラーコードによって上書きされます。

例えば:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";

$mysqli->query($query1);
echo "第一个查询エラーコード: " . $mysqli->errno . "<br>";

$mysqli->query($query2);
echo "第二个查询エラーコード: " . $mysqli->errno . "<br>";
?>

上記のコードを実行すると、 $ mysqli-> errnoは最初のクエリを実行した後に最初のエラーコードを返しますが、2番目のクエリを実行すると、新しいエラーコードによって上書きされます。したがって、最後のクエリのエラーコードのみを表示することができ、各クエリのエラーコードを直接取得することはできません。

3.毎回エラーコードを正しく取得するにはどうすればよいですか?

各クエリのエラーコードを正しく取得するために、各クエリが実行された後、現在のエラーコードを手動で保存できます。変数を使用して、各クエリのエラーコードを記録するため、上書きの問題を回避できます。

これが改善されたコードです:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";

// 最初のクエリを実行します
$mysqli->query($query1);
$error_code1 = $mysqli->errno; // 保存第一个查询的エラーコード
echo "第一个查询エラーコード: " . $error_code1 . "<br>";

// 2番目のクエリを実行します
$mysqli->query($query2);
$error_code2 = $mysqli->errno; // 保存第二个查询的エラーコード
echo "第二个查询エラーコード: " . $error_code2 . "<br>";
?>

この例では、 $ error_code1$ error_code2を使用して、それぞれ各クエリのエラーコードを保存します。このようにして、各クエリのエラーコードは上書きされませんが、個別に記録されます。

4。結論

さまざまな変数を使用して各クエリのエラーコードを保存することにより、複数のクエリが接続を共有している場合でも、エラーコードが上書きされないようにします。このアプローチは、誤動作とデータの損失を回避し、クエリエラーのより正確なデバッグと処理を可能にします。

うまくいけば、この記事がmysqli :: $ errnoの使用をよりよく理解し、各クエリのエラーコードを正しく取得できるソリューションを提供できることを願っています。