現在の位置: ホーム> 最新記事一覧> stmt_initおよびfetch()の使用に関する詳細な説明と併せて

stmt_initおよびfetch()の使用に関する詳細な説明と併せて

M66 2025-05-16

PHPを使用してMySQLデータベースを操作する場合、 MySQLI拡張機能は、SQLステートメントをより安全かつ構造的に実行できるオブジェクト指向インターフェイスを提供します。特に、準備されたステートメントを実行する場合、 MySQLI :: STMT_INITFETCH()は2つの非常に重要な関数です。

この記事では、mysqli :: stmt_init()を使用してステートメントオブジェクトを初期化し、 fetch()メソッドを組み合わせてデータベース内のデータを安全かつ効率的に取得する方法を詳細に紹介します。

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

mysqli :: stmt_init()は、ステートメントオブジェクト( mysqli_stmt )の初期化に使用されるmysqliクラスの方法です。このオブジェクトは、 prepare()メソッドを介してSQLステートメントを準備できます。これの利点は、コードのセキュリティと効率を改善するために、ステートメントを再利用してパラメーターを結合できることです。

例:

 $mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$stmt = $mysqli->stmt_init();

2。SQLステートメントを準備して実行します

stmt_init()を使用してステートメントオブジェクトを作成した後、 prepare()を使用してクエリステートメントを準備し、 bind_param()を使用してパラメーターをバインドします。

 $query = "SELECT id, name, email FROM users WHERE status = ?";
if ($stmt->prepare($query)) {
    $status = 'active';
    $stmt->bind_param("s", $status);
    $stmt->execute();
}

ヒント: bind_paramの最初のパラメーター「s」は、パラメータータイプが文字列(文字列)であることを意味します。

3.結果をバインドし、 fetch()を使用してデータを抽出します

ステートメントを実行した後、 bind_result()を使用してクエリ結果の列を変数にバインドする必要があります。その後、 fetch()メソッドを使用して行ごとにデータを抽出できます。

 $stmt->bind_result($id, $name, $email);

while ($stmt->fetch()) {
    echo "ユーザーID: $id<br>";
    echo "ユーザー名: $name<br>";
    echo "郵便: $email<br><br>";
}

4。完全な例

これが完全なPHPサンプルプログラムです:

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$stmt = $mysqli->stmt_init();
$query = "SELECT id, name, email FROM users WHERE status = ?";

if ($stmt->prepare($query)) {
    $status = 'active';
    $stmt->bind_param("s", $status);
    $stmt->execute();
    $stmt->bind_result($id, $name, $email);

    echo "<h2>活跃ユーザー列表:</h2>";
    while ($stmt->fetch()) {
        echo "<div>";
        echo "<strong>ID:</strong> $id<br>";
        echo "<strong>名前:</strong> $name<br>";
        echo "<strong>郵便:</strong> <a href='mailto:$email'>$email</a><br>";
        echo "<a href='https://m66.net/user/profile.php?id=$id'>詳細を確認してください</a>";
        echo "</div><hr>";
    }

    $stmt->close();
} else {
    echo "SQL 前処理に失敗しました: " . $stmt->error;
}

$mysqli->close();
?>