現在の位置: ホーム> 最新記事一覧> fetch_fields、prepare and bind_resultの完全な使用プロセスは何ですか? 1つの記事で明確に説明してください

fetch_fields、prepare and bind_resultの完全な使用プロセスは何ですか? 1つの記事で明確に説明してください

M66 2025-06-23

PHPでは、データベース操作は、開発者の日常業務の不可欠な部分です。効率を改善し、SQL注入攻撃を防ぐために、MySQLIによって拡張された準備されたステートメントを使用することは、強く推奨されるアプローチです。この記事では、PHPでMySQLI Fetch_FieldsPrepare and Bind_Resultの使用プロセスを詳細に紹介します。

1。メソッドを準備します

まず、データベース接続を作成する必要があります。次に、準備方法を使用してSQLステートメントを準備できます。この方法は、SQLクエリをパラメーターとして受け入れ、準備されたステートメントオブジェクトを返します。

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

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

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

上記のコードでは、準備メソッドはSQLステートメントを事前に処理し、後続のパラメーターバインディングの準備をします。

2。バインドパラメーター( bind_param

次に、パラメーターをバインドする必要があります。 bind_paramメソッドは、実際のパラメーター値をSQLステートメントにバインドできます。この例では、クエリはアクティブフィールドを介してデータをフィルターしているため、代わりにパラメーターをバインドする必要がありますか

 $active = 1;
$stmt->bind_param("i", $active);  // "i"整数タイプを示します

bind_paramメソッドの最初のパラメーターは、SQLステートメントの各パラメーターのタイプを表す文字列です。一般的なタイプは次のとおりです。

  • I :整数

  • D :ダブル精度の浮動ポイント

  • S :文字列

  • B :BLOBタイプデータ

この例では、整数型パラメーター( $ active )にバインドします。

3。クエリを実行する(実行

パラメーターをバインディングした後、実行方法を使用してSQLステートメントを実行できます。

 $stmt->execute();

現時点では、SQLクエリは実行されますが、データはまだ返されていません。 fetch_fieldsを介してクエリ結果の構造を取得し、 bind_resultを介して各列の値をバインドする必要があります。

4。フィールド情報を取得する( fetch_fields

fetch_fieldsメソッドは、列名、タイプなどを含むクエリ結果のフィールド情報を取得できます。後続の結果処理に使用できるフィールドオブジェクトの配列を返します。

 $fields = $stmt->fetch_fields();
foreach ($fields as $field) {
    echo "フィールド名: " . $field->name . "<br>";
    echo "フィールドタイプ: " . $field->type . "<br>";
}

上記のコードは、各フィールドの名前とタイプを出力します。 FETCH_FIELDSメソッドによって返されたフィールドオブジェクトには、リッチメタデータが含まれています。これにより、開発者がデータベーステーブルの構造情報を取得できるようになります。

5。結果変数をバインドします( bind_result

クエリを実行した後、クエリ結果の列をBIND_RESULTメソッドを介してPHP変数にバインドする必要があります。 BIND_RESULTメソッドを使用すると、変数を渡すことにより、結果のデータの各行を抽出できます。

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

ここでは、クエリの結果のID名前電子メールフィールドを、それぞれ$ ID$ name$ email変数にバインドします。

6。結果を取得(フェッチ

結果変数をバインディングした後、 fetchメソッドを使用して、rowごとにクエリ結果を抽出できます。

 while ($stmt->fetch()) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}

Fetchメソッドは、データの行が正常に取得されたかどうかを示すブール値を返します。取得が成功した場合、現在の行のデータにバウンド変数を介してアクセスできます。

7。閉じる声明と接続

すべての操作が完了したら、準備されたステートメントとデータベース接続を閉じてリソースを解放することを忘れないでください。

 $stmt->close();
$mysqli->close();

8。完全な例

上記の手順を統合すると、最終的な完全なコードは次のとおりです。

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

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

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

$active = 1;
$stmt->bind_param("i", $active);

$stmt->execute();

$fields = $stmt->fetch_fields();
foreach ($fields as $field) {
    echo "フィールド名: " . $field->name . "<br>";
    echo "フィールドタイプ: " . $field->type . "<br>";
}

$stmt->bind_result($id, $name, $email);
while ($stmt->fetch()) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}

$stmt->close();
$mysqli->close();
?>