データベース操作にPHPを使用する場合、 MySQLI拡張機能はクエリ実行に機能を提供します。データベース接続を使用すると、複数のSQLクエリを実行できますが、複数のクエリを実行すると、問題が発生する可能性があります。言い換えれば、複数のクエリが接続を共有する場合、毎回エラーコードを正しく取得するにはどうすればよいですか?
この投稿では、 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が最後のクエリのエラーコードを返します。
同じ接続で複数のクエリを実行すると、 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番目のクエリを実行すると、新しいエラーコードによって上書きされます。したがって、最後のクエリのエラーコードのみを表示することができ、各クエリのエラーコードを直接取得することはできません。
各クエリのエラーコードを正しく取得するために、各クエリが実行された後、現在のエラーコードを手動で保存できます。変数を使用して、各クエリのエラーコードを記録するため、上書きの問題を回避できます。
これが改善されたコードです:
<?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を使用して、それぞれ各クエリのエラーコードを保存します。このようにして、各クエリのエラーコードは上書きされませんが、個別に記録されます。
さまざまな変数を使用して各クエリのエラーコードを保存することにより、複数のクエリが接続を共有している場合でも、エラーコードが上書きされないようにします。このアプローチは、誤動作とデータの損失を回避し、クエリエラーのより正確なデバッグと処理を可能にします。
うまくいけば、この記事がmysqli :: $ errnoの使用をよりよく理解し、各クエリのエラーコードを正しく取得できるソリューションを提供できることを願っています。