mysqli_stmt_bind_result(): バインド変数の数が、準備されたステートメントのフィールドの数と一致しません

ナヒド・ハサン

/ カート テーブルには 4 つのフィールドがあります。ID、ユーザー名、製品 ID、画像。すべてのデータをテーブルに表示しようとしています。

<?php

$query = "SELECT * FROM cart WHERE user_name='$username'";

if ($stmt = mysqli_prepare($mysqli, $query)) {

    /* execute statement */
    mysqli_stmt_execute($stmt);

    /* bind result variables */
    mysqli_stmt_bind_result($stmt,$username);

    /* fetch values */
    while ($row=mysqli_stmt_fetch($stmt)) 

{
キレル

私が見る限り、ここには 2 つの問題があります。

  1. 入力をバインドしていません- これがプリペアドステートメントの要点です。が必要mysqli_stmt_bind_param()です。クエリに変数を直接挿入することは安全ではありません。これが、クエリを準備する理由です。
  2. で選択した正確な量の列をバインドしていませんmysqli_stmt_bind_result()これは、選択する列の正確な数である必要があります。

これを機能させるに?は、クエリで変数の代わりにプレースホルダーを使用する必要があります (および を使用しますmysqli_stmt_bind_param())。また、特定の列を選択する必要があり、実行しないでくださいSELECT *そうした場合SELECT *でも、同じ量の結果をバインドすれば機能させることができますが、後で列を 1 つ追加するとコードが壊れます。

以下のこのコードは、特定の列を選択するように変更されており、mysqli_stmt_bind_result(). クエリにプレースホルダーが追加され、使用法がmysqli_stmt_bind_param()実装されました。

$query = "SELECT id, user_name, produc_id, image FROM cart WHERE user_name=?";

if ($stmt = mysqli_prepare($mysqli, $query)) {

    mysqli_stmt_bind_param("s", $username);

    /* execute statement */
    mysqli_stmt_execute($stmt);

    /* bind result variables */
    mysqli_stmt_bind_result($stmt, $user_id, $username, $product_id, $image);

    /* fetch values */
    while ($row=mysqli_stmt_fetch($stmt)) {
        // Fetch here
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ