PHPアプリケーションを開発する場合、データベースと対話することがよくあります。 MySQLI拡張機能を使用する場合、 MySQLI :: $ ERRNOおよびMYSQLI :: $エラーは、データベースエラーをキャッチするための非常に一般的で重要なツールです。ただし、多くの開発者は、MySQLI :: $ errnoの目的を誤解しており、それを単にデータベース接続エラーをチェックするツールと見なす場合があります。この誤解は、特にエラーが発生した場合、トラブルシューティングをより複雑にする可能性があります。この記事では、一般的な誤解を避けるために、 mysqli :: $ errnoを正しく使用する方法を詳細に分析します。
mysqli :: $ errnoは、以前のmysql操作のエラーコードを保存するために使用されるmysqliオブジェクトのプロパティです。以前の操作が正常に実行された場合、 mysqli :: $ errnoの値は0になります。そうしないと、非ゼロエラーコードが返されます。
MySqli :: $ errnoは、データベース接続エラーだけでなく、 MySQLIを介して実行されるすべてのSQLクエリ操作にも適していることに注意してください。
<?php
// データベース接続を作成します
$mysqli = new mysqli("localhost", "user", "password", "database");
// 接続を確認してください
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
// クエリを実行します
$query = "SELECT * FROM non_existing_table";
$result = $mysqli->query($query);
// クエリが成功したかどうかを確認してください
if (!$result) {
echo "クエリエラー: " . $mysqli->error;
echo "エラーコード: " . $mysqli->errno; // エラーコードを取得します
}
$mysqli->close();
?>
このコードでは、 mysqli :: $ errnoがクエリエラーのエラーコードを返し(存在する場合)、 mysqli :: $ errorはエラーに関する詳細情報を提供します。
Mysqli :: $ errnoは、データベース接続時にエラーをチェックするためにのみ使用されると誤って信じている多くの開発者がいます。 mysqli :: $ errnoを誤解している場合、他の問題のトラブルシューティング時に重要なエラー情報の欠落につながる可能性があります。実際、 mysqli :: $ errnoを使用して、クエリエラー、更新エラー、さらにはトランザクションコミットフェイルなどを確認できます。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// 間違った仮定:只接続を確認してください間違い
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
// 間違った方法:他の人をチェックしないでください SQL 間違い
$query = "SELECT * FROM non_existing_table";
$mysqli->query($query);
// 此处没有クエリが成功したかどうかを確認してください,可能错过了クエリエラー
$mysqli->close();
?>
上記のコードでは、開発者は、接続エラーに注意を払うだけで、クエリエラーのチェックを無視するだけであると誤って信じる場合があります。そうすることで、クエリが実行されたときにデータベース内の他の問題がキャッチできなくなります。
上記の誤解を回避するには、接続操作、クエリ、更新、削除、その他のデータベース操作であるかどうかにかかわらず、各データベース操作を実行した後、 mysqli :: $ errnoを確認する必要があります。この方法でのみ、潜在的なデータベースの問題を以前に発見できます。
<?php
// データベース接続を作成します
$mysqli = new mysqli("localhost", "user", "password", "database");
// 接続を確認してください間違い
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
// クエリを実行します
$query = "SELECT * FROM non_existing_table";
$result = $mysqli->query($query);
// クエリが成功したかどうかを確認してください
if (!$result) {
echo "クエリエラー: " . $mysqli->error;
echo "エラーコード: " . $mysqli->errno; // 获取クエリエラー码
}
$mysqli->close();
?>
上記のコードでは、データベース接続エラーを確認するだけでなく、クエリ後に可能なクエリエラーを確認します。これを行うことで、すべてのリンクで問題をキャプチャし、それにより問題をより効率的に配置および解決することができます。
mysqli :: $ errnoより明確に返されたエラーコードを理解するために、mysqlエラーコードドキュメントを参照できます。一般的なエラーコードの例を次に示します。
1045 :「ユーザーに拒否されたアクセス」 - ユーザー名またはパスワードエラー
1146 :「テーブルは存在しません」 - テーブルは存在しません
1064 :「SQL構文にエラーがあります」 - SQL構文エラー
これらのエラーコードを理解することで、エラー情報をより適切に解釈し、問題をすばやく見つけることができます。
mysqli :: $ errnoは主にエラーコードを提供するために使用されますが、 mysqli :: $エラーは詳細なエラー説明を返します。実際に問題のトラブルシューティングの場合、通常、これら2つの属性を組み合わせて使用して、データベース操作の障害の理由を完全に理解する必要があります。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
$query = "SELECT * FROM non_existing_table";
$result = $mysqli->query($query);
if (!$result) {
echo "クエリに失敗しました: " . $mysqli->error . "<br>";
echo "エラーコード: " . $mysqli->errno;
}
$mysqli->close();
?>
エラー情報とエラーコードを同時に出力することにより、問題の根本原因をより明確に理解し、それを修正するために対応する措置を講じることができます。
mysqli :: $ errnoは、PHPの非常に重要なプロパティです。データベース接続エラーを確認するために使用されるだけでなく、すべてのMySQL操作でより広く使用されています。誤解によるトラブルシューティングを避けるために、 mysqli :: $ errnoを各データベース操作の後に確認して、潜在的なエラーが時間内に捉えることができることを確認する必要があります。 MySqli :: $ ERRNOの正しい理解と使用により、開発プロセス中に問題をより効率的にトラブルシューティングし、バグの発生を減らすことができます。