データベース操作にPHPのMySQLI拡張機能を使用する場合、 MySQLI_STMT :: PREPAREは、 SQLステートメントを前処理するための重要な方法です。前処理ステートメントはセキュリティと効率を向上させることができますが、準備の実行中に、SQLステートメントにエラーがある場合、特定のMySQLエラーコードを取得する方法を理解することはデバッグに非常に重要です。この記事では、mysqli_stmt :: prepareが実行され、関連する手順が実行されたときに生成されたmysqlエラーコードを取得する方法を詳細に紹介します。
mysqli_stmt :: prepareメソッドは、SQLステートメントを前処理するために使用されます。前処理が成功しているかどうかを示すブール値を返します。失敗した場合、関連する属性またはメソッドを使用してエラー情報とエラーコードを取得できます。
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare("YOUR SQL HERE")) {
// 前処理に失敗しました
}
mysqli_stmtオブジェクトは、エラー情報を取得するために2つの重要なメンバーを提供します。
$ stmt-> errno :エラーコード(エラー番号)を取得する
$ stmt->エラー:エラーメッセージを取得します
さらに、オブジェクト$ mysqliを接続することにより、グローバルエラーコードと情報を取得することもできます。
以下は、障害が発生したときにエラーコードとエラーメッセージを作成して取得する方法を示すサンプルコードです。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_errno) {
die("接続に失敗しました,エラーコード: " . $mysqli->connect_errno . ",エラーメッセージ: " . $mysqli->connect_error);
}
// プリプロセシングステートメントオブジェクトを初期化します
$stmt = $mysqli->stmt_init();
// 前処理 SQL 声明(エラーをトリガーするために、ここに違法に書き込みます)
$sql = "SELEC * FROM users"; // 間違っている SQL,SELECT エラースペル
if (!$stmt->prepare($sql)) {
echo "前処理に失敗しました!" . PHP_EOL;
echo "エラーコード: " . $stmt->errno . PHP_EOL;
echo "エラーメッセージ: " . $stmt->error . PHP_EOL;
} else {
echo "前処理成功!" . PHP_EOL;
}
$stmt->close();
$mysqli->close();
?>
上記のコードでは、 Selectは意図的にSELECとして綴られており、準備メソッドはFALSEを返します。
$ stmt-> errnoおよび$ stmt->エラーを介して、詳細なエラーコードとエラーの説明を取得します。
接続が失敗したら、 $ mysqli-> connect_errnoおよび$ mysqli-> connect_errorを使用してエラー情報を取得します。
MySQLI_STMT ::準備中に生成されたMySQLエラーコードを取得すると、主にMySQLI_STMTオブジェクトのerrno属性に依存します。エラー属性と組み合わせることで、問題をすばやく見つけ、デバッグを容易にすることができます。各呼び出しの後に返品値を検出して準備することをお勧めし、障害時にエラーコードとエラー情報をすぐに読み取ることをお勧めします。