PHP開発では、特にクエリステートメントが複雑で複数の条件と句が含まれている場合、SQLクエリのエラーデバッグは通常、退屈なタスクです。 MySQLI_STMT :: $ ERRORプロパティは、SQLクエリのエラー、特に条項の一般的なエラーを迅速に発見および解決するための非常に効果的なツールを提供します。
まず、 mysqli_stmt :: $エラーはmysqli_stmtクラスのプロパティであり、最後のSQLステートメントが実行されたときに生成されたエラー情報を保存します。通常、 mysqli_stmt :: $エラーはエラー文字列を返します。 SQLクエリ実行に問題がない場合、プロパティは空の文字列を返します。
これにより、 mysqli_stmt :: $エラーは、特に句で複合施設をデバッグする場合、SQLエラーをキャッチするための重要なツールになります。
Where句には、一般的なエラーが含まれます。
誤った列またはテーブル名
間違った比較演算子( ==の代わりに==を使用するなど)
間違った構文(例:括弧の欠落)
不適切なデータ型の比較(文字列と数字の比較など)
これらのエラーは通常、特にSQLクエリステートメントが長い場合、直感的に簡単に検出されません。
以下は、SQLクエリをデバッグし、 mysqli_stmt :: $エラーを介して句のエラーを見つけるための手順を示します。
まず、MySQLIデータベース接続を作成し、SQLステートメントを準備します。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 前処理ステートメント
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND age > ?");
if ($stmt === false) {
die("声明の作成に失敗しました: " . $mysqli->error);
}
?>
次に、クエリパラメーターをバインドしてステートメントを実行します。ここでは、違法な年齢の価値を渡すなど、 Where句のエラーに年齢フィールドを意図的に作成できます。
<?php
$username = "john_doe";
$age = "twenty"; // ここでは、故意に年齢をひもに設定します,数字ではありません
$stmt->bind_param("si", $username, $age);
$stmt->execute();
?>
SQLクエリを実行した後、SQLステートメントがMySQLI_STMT :: $エラーを介して正常に実行されるかどうかを確認できます。エラーが発生した場合、詳細なエラーメッセージが返され、問題がすぐに見つかります。
<?php
if ($stmt->error) {
echo "SQL 間違い: " . $stmt->error;
} else {
echo "クエリが成功しました";
}
?>
この時点で、 $ stmt->エラーは次のようなエラーメッセージが出力されます。
SQL 間違い: Unknown column 'twenty' in 'where clause'
エラーメッセージから、受信20の文字列が法的番号ではないため、句の年齢フィールドでエラーが発生したことがわかります。
mysqli_stmt :: $エラーを使用することに加えて、追加のデバッグ手順を実行できます。
完全なSQLクエリの印刷:SQLクエリを手動で表示することも、デバッグする効果的な方法である場合があります。 MySQLIは、バインドされたクエリステートメントの出力を直接サポートしていませんが、クエリ文字列を手動で作成して出力できます。
MySQLエラーログの表示:データベースサーバーがサポートしている場合、MySQLエラーログを表示することもできます。これには、通常、SQLエラーの詳細が含まれています。
MySQLI_STMT :: $ ERRORプロパティを使用すると、PHP開発者は、SQLクエリを実行するときに条項がある場合にエラーをすばやくキャッチして見つけることができます。これは、複雑なクエリステートメントにとって特に重要です。合理的なエラー処理とデバッグスキルを組み合わせることで、デバッグ効率を効果的に改善し、一般的なSQLエラーを回避できます。