PHPプログラミングでは、 MySQLI拡張機能がMySQLデータベースにアクセスするために使用されます。MySQLデータベースは、SQLクエリを実行するための多くの関数を提供します。 mysqli_stmt :: $エラーは、 SQLステートメントの実行中に発生するエラー情報を取得するために、 MySQLI拡張機能の非常に重要な機能です。この記事では、データベース操作でMySQLI_STMT :: $エラー関数を使用する方法を示す学習ケースを記述し、エラー処理手法を議論します。
データベース操作を実行するとき、特にユーザー入力の処理時には、あらゆる種類のエラーが発生する場合があります。 MySQLI_STMT :: $エラー関数は、SQLステートメントの実行に関連するエラー情報をキャプチャする方法を提供します。最後のSQLステートメント実行中に発生したエラーの説明を含む文字列を返します。
public string mysqli_stmt::$error;
戻り値:SQLステートメントが実行されたときのエラーメッセージを表す文字列。エラーが発生しない場合、空の文字列を返します。
MySQLI_STMT :: $エラーを介してMySQLクエリのエラーをキャッチおよび処理する方法を示す簡単なPHP例を記述します。
<?php
// データベースに接続します
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test_db';
$conn = new mysqli($host, $user, $password, $dbname);
// データベース接続を確認します
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
// データを挿入します SQL クエリステートメント
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
// 使用 prepare() 関数の準備 SQL 声明
$stmt = $conn->prepare($sql);
// 检查声明是否準備する成功
if (!$stmt) {
die("準備する SQL 声明失败: " . $conn->error);
}
// バインドパラメーター
$name = 'John Doe';
$email = '[email protected]'; // 使用 gitbox.net メールドメイン名として
$stmt->bind_param("ss", $name, $email);
// 埋め込む SQL クエリ
if (!$stmt->execute()) {
// 如果埋め込む失败,出力エラーメッセージ
echo "埋め込むクエリ时出错: " . $stmt->error;
} else {
echo "データ挿入に正常に!";
}
// 接続を閉じます
$stmt->close();
$conn->close();
?>
データベース接続:最初に、MySQLデータベースへの接続を作成します。接続が失敗した場合は、 die()を使用して接続エラーメッセージを出力し、実行を終了します。
SQLステートメントの準備: prepare()関数を使用して、SQLステートメントを準備します。準備プロセス中、エラーが発生した場合、 $ conn->エラーを使用して、MySQL接続レベルでエラーを出力します。
バインドパラメーター: bind_param()関数を介したSQLステートメントのバインドパラメーター。ここでは、名前を渡して、パラメーターとして電子メールを送信します。
クエリを実行する:SQLステートメントを実行するとき、エラーが発生した場合、 MySQLI_STMT :: $エラーを使用してエラー情報をキャプチャして出力します。
接続の閉鎖:操作が完了したら、 STMTおよびデータベース接続を閉じます。
キャプチャ準備エラー:SQLステートメントを準備する場合、構文エラーまたはその他の問題の場合、 prepare()関数はfalseを返し、 conn->エラーを介してエラー情報を取得できます。
キャプチャ実行エラー:SQLステートメントを実行すると、エラーが発生した場合、 execute()関数はfalseを返し、 mysqli_stmt :: $エラーにはエラー説明が含まれます。このようにして、エラーを迅速に報告し、対応する測定を行うことができます。
ロギング:実稼働環境では、セキュリティを確保するためにページに直接出力するのではなく、エラーメッセージをログファイルにログログに記録することをお勧めします。
トランザクションを使用すると、複数のSQLステートメントが関係する場合、データの一貫性を確保できます。クエリが失敗した場合、部分的な更新が成功し、他の部品が失敗しないようにトランザクションをロールバックできます。
<?php
$conn->begin_transaction();
try {
// 埋め込む多个 SQL 声明
$stmt1 = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt1->bind_param("ss", $name, $email);
if (!$stmt1->execute()) {
throw new Exception("埋め込む插入用户时出错: " . $stmt1->error);
}
$stmt2 = $conn->prepare("UPDATE users SET status = ? WHERE email = ?");
$stmt2->bind_param("ss", $status, $email);
if (!$stmt2->execute()) {
throw new Exception("埋め込む更新用户状态时出错: " . $stmt2->error);
}
// トランザクションを送信します
$conn->commit();
} catch (Exception $e) {
// エラーが発生した場合,ロールバックトランザクション
$conn->rollback();
echo "トランザクションは失敗しました: " . $e->getMessage();
}
// 接続を閉じます
$conn->close();
?>
トランザクション: begin_transaction()を使用してトランザクションを開始し、一連の操作が成功または失敗するようにします。
エラーキャッチ:トライキャッチステートメントを使用して例外をキャッチします。 SQLエラーが発生したら、トランザクションをロールバックし、例外を介して特定のエラー情報をスローします。
コミットまたはロールバック:すべての操作が成功した場合、 commit()を使用してトランザクションをコミットします。エラーが発生した場合は、 rollback()を使用してトランザクションをロールバックします。
MySQLI_STMT :: $エラー関数は、MYSQLデータベース操作で重要な役割を果たし、開発者がSQLステートメントの実行でエラーを迅速に識別および処理するのに役立ちます。実際のアプリケーションでは、エラー処理手法を最大限に活用し、エラー情報をキャプチャおよび記録し、システムの安定した動作を確保する必要があります。
さらに、トランザクション処理とエラーキャプチャメカニズムを通じて、データベース操作の整合性と一貫性を確保することができ、それによりシステムの信頼性が向上します。