PHPを使用してMySQLデータベースを操作する場合、準備されたステートメントはSQLインジェクションを効果的に防止し、セキュリティとコードの保守性を向上させることができます。ただし、構文エラー、パラメーターバインディングエラー、実行障害など、執筆および実行前のステートメントの実行中にさまざまなエラーが発生する場合があります。
これらの問題をすばやく見つけるために、 mysqli_stmt :: $エラーは非常に便利なデバッグツールです。 MySqli_Stmtクラスのプロパティです。実行ステートメントが失敗したときに特定のエラー情報を返すことができ、開発者が問題を迅速に見つけることができます。
mysqli_stmt :: $エラーを使用した基本的な例を次に示します。
<?php
$mysqli = new mysqli("localhost", "db_user", "db_pass", "test_db");
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("前処理に失敗しました: " . $mysqli->error);
}
// パラメーターバインディングを誤って記述します:2つのパラメーターをバインドする必要があると仮定します,ここでは1つだけが縛られています
$stmt->bind_param("s", $username);
$username = "alice";
$email = "[email protected]";
if (!$stmt->execute()) {
// 使用 mysqli_stmt::$error 出力詳細エラー
echo "実行に失敗しました: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
出力は次のとおりです。
実行に失敗しました: Number of variables doesn't match number of parameters in prepared statement
このエラープロンプトは、パラメーターの数の不一致の問題を明確に示しています。
このプロパティを使用して、次の状況でデバッグできます。
前処理ステートメントの作成が失敗した場合<br> $ mysqli->エラーを使用してエラー情報を取得します。
パラメーターバインディングが失敗した場合、または数の不一致
bind_param()自体はエラーを報告しませんが、パラメーターの数が正しくない場合、 $ stmt->エラーが実行時にプロンプトされます。
実行が失敗した場合(一意の制約が違反されている場合)
たとえば、重複したメールを挿入しようとすると、 $ stmt->エラーは次のようなものを返します
キー「電子メール」の「[email protected]」の「複製」のヒント '" 。
後続のトラブルシューティングのために、エラー情報をログにログに記録することもできます。
if (!$stmt->execute()) {
error_log("前処理実行エラー: " . $stmt->error);
}
これにより、生産環境でユーザーにエラーを公開することを避け、開発者が問題のトラブルシューティングを促進することもできます。
falseのreturnに依存しないでください。詳細をエラー属性と組み合わせて表示してください。
開発段階は、直接出力エラーを使用できます。ログは、生産環境に記録する必要があります。
Errnoで使用すると、より詳細な判断のためにエラーコードを取得できます。
mysqli_stmt :: $エラーは、プリプロセシングステートメントのデバッグにおける非常に実用的なツールです。それを通して、ステートメントが失敗する理由をすばやく知ることができ、それにより開発効率を高速化し、トラブルシューティング時間を短縮できます。
開発プロセス中、この属性を合理的に使用すると、データベースのインタラクションがより堅牢で信頼性が高まります。