現在の位置: ホーム> 最新記事一覧> stmt_initを使用した後、execute()を呼び出す方法

stmt_initを使用した後、execute()を呼び出す方法

M66 2025-05-29

PHPを使用してMySQLデータベースを操作する場合、 MySQLI拡張機能は、SQLインジェクション攻撃を効果的に防止し、データベース操作のセキュリティと効率を改善できるリッチな前処理ステートメント(準備されたステートメント)サポートを提供します。この記事では、MySQLI :: STMT_INITメソッドを使用してステートメントオブジェクトを初期化し、オブジェクトを介してSQLステートメントを実行する方法に焦点を当てます。

1。mysqli :: stmt_initとは何ですか?

mysqli :: stmt_init()は、空のステートメントオブジェクト( mysqli_stmt )の初期化に使用されるmysqliクラスの方法です。このオブジェクトは、 prepare()メソッドを呼び出し、さらにbind_param()execute() 、およびその他の操作方法と呼ばれることにより、SQLクエリステートメントにバインドできます。

基本的な構文は次のとおりです。

 $stmt = $mysqli->stmt_init();

ここで、 $ mysqliはデータベースに接続されているmysqliオブジェクトです。

2。完了例: STMT_INITを使用してSQLクエリを実行します

STMT_INIT初期化ステートメントとSQLクエリの実行を使用した完全なPHP例を次に示します。

 <?php
// データベース接続
$mysqli = new mysqli("localhost", "username", "password", "database");

// 接続を確認してください
if ($mysqli->connect_error) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

// ステートメントオブジェクトを初期化します
$stmt = $mysqli->stmt_init();

// 前処理 SQL 声明
if ($stmt->prepare("SELECT name, email FROM users WHERE id = ?")) {
    // バインドパラメーター
    $id = 1;
    $stmt->bind_param("i", $id);

    // 执行声明
    $stmt->execute();

    // 結合結果変数
    $stmt->bind_result($name, $email);

    // クエリの結果を取得します
    while ($stmt->fetch()) {
        echo "ユーザー名: $name, 郵便: $email<br>";
    }

    // 关闭声明
    $stmt->close();
} else {
    echo "SQL 前処理失败: " . $stmt->error;
}

// 接続を閉じます
$mysqli->close();
?>

3。注意すべきこと

  • stmt_init()を呼び出した後、 prepare()メソッドを使用して、実際にSQLステートメントを結合する必要があります。

  • たとえば、 bind_param()のタイプパラメーターは、 「i」は整数を表し、 「s」は文字列を表し、正しく設定する必要があります。

  • ステートメントオブジェクトを使用してリソースを解放した後、必ず$ stmt-> close()を呼び出してください。

4.直接$ mysqli-> prepare()の代わりにstmt_initを使用する理由

ステートメントの準備に$ mysqli-> prepare()を直接使用できますが、 stmt_init()は、ステートメントが再利用可能かどうかを確認するか、低レベルのインターフェイスを使用するかを確認する必要がある場合など、より詳細なコントロールを提供します。

5。実用的なアプリケーションシナリオの例