現在の位置: ホーム> 最新記事一覧> mysqli_stmt :: $エラーの典型的なアプリケーションを示すために学習ケースを書く

mysqli_stmt :: $エラーの典型的なアプリケーションを示すために学習ケースを書く

gitbox 2025-05-28

PHPプログラミングでは、 MySQLI拡張機能がMySQLデータベースにアクセスするために使用されます。MySQLデータベースは、SQLクエリを実行するための多くの関数を提供します。 mysqli_stmt :: $エラーは、 SQLステートメントの実行中に発生するエラー情報を取得するために、 MySQLI拡張機能の非常に重要な機能です。この記事では、データベース操作でMySQLI_STMT :: $エラー関数を使用する方法を示す学習ケースを記述し、エラー処理手法を議論します。

1。背景知識: mysqli_stmt :: $エラー関数

データベース操作を実行するとき、特にユーザー入力の処理時には、あらゆる種類のエラーが発生する場合があります。 MySQLI_STMT :: $エラー関数は、SQLステートメントの実行に関連するエラー情報をキャプチャする方法を提供します。最後のSQLステートメント実行中に発生したエラーの説明を含む文字列を返します。

mysqli_stmt :: $エラーの構文:

 public string mysqli_stmt::$error;
  • 戻り値:SQLステートメントが実行されたときのエラーメッセージを表す文字列。エラーが発生しない場合、空の文字列を返します。

2。学習ケース: mysqli_stmt :: $ errorの適用を実証します

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();
?>

コード解析:

  1. データベース接続:最初に、MySQLデータベースへの接続を作成します。接続が失敗した場合は、 die()を使用して接続エラーメッセージを出力し、実行を終了します。

  2. SQLステートメントの準備prepare()関数を使用して、SQLステートメントを準備します。準備プロセス中、エラーが発生した場合、 $ conn->エラーを使用して、MySQL接続レベルでエラーを出力します。

  3. バインドパラメーターbind_param()関数を介したSQLステートメントのバインドパラメーター。ここでは、名前を渡して、パラメーターとして電子メールを送信します

  4. クエリを実行する:SQLステートメントを実行するとき、エラーが発生した場合、 MySQLI_STMT :: $エラーを使用してエラー情報をキャプチャして出力します。

  5. 接続の閉鎖:操作が完了したら、 STMTおよびデータベース接続を閉じます。

エラー処理のヒント:

  • キャプチャ準備エラー:SQLステートメントを準備する場合、構文エラーまたはその他の問題の場合、 prepare()関数はfalseを返し、 conn->エラーを介してエラー情報を取得できます。

  • キャプチャ実行エラー:SQLステートメントを実行すると、エラーが発生した場合、 execute()関数はfalseを返し、 mysqli_stmt :: $エラーにはエラー説明が含まれます。このようにして、エラーを迅速に報告し、対応する測定を行うことができます。

  • ロギング:実稼働環境では、セキュリティを確保するためにページに直接出力するのではなく、エラーメッセージをログファイルにログログに記録することをお勧めします。

3.さらなる最適化:SQLエラーをキャプチャし、それらを詳細に処理する

エラー処理にはトランザクションを使用します

トランザクションを使用すると、複数の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();
?>

コード解析:

  1. トランザクションbegin_transaction()を使用してトランザクションを開始し、一連の操作が成功または失敗するようにします。

  2. エラーキャッチトライキャッチステートメントを使用して例外をキャッチします。 SQLエラーが発生したら、トランザクションをロールバックし、例外を介して特定のエラー情報をスローします。

  3. コミットまたはロールバック:すべての操作が成功した場合、 commit()を使用してトランザクションをコミットします。エラーが発生した場合は、 rollback()を使用してトランザクションをロールバックします。

4。概要

MySQLI_STMT :: $エラー関数は、MYSQLデータベース操作で重要な役割を果たし、開発者がSQLステートメントの実行でエラーを迅速に識別および処理するのに役立ちます。実際のアプリケーションでは、エラー処理手法を最大限に活用し、エラー情報をキャプチャおよび記録し、システムの安定した動作を確保する必要があります。

さらに、トランザクション処理とエラーキャプチャメカニズムを通じて、データベース操作の整合性と一貫性を確保することができ、それによりシステムの信頼性が向上します。