2017-07-06 25 views
0

/カートテーブルには4つのフィールドがあります。 ID、ユーザー名、製品ID、イメージ私はテーブルのすべてのデータを表示しようとしています。mysqli_stmt_bind_result():バインド変数の数がプリペイドステートメントのフィールド数と一致しません

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

{ 
+1

? – Qirel

+0

準備されたステートメントの仕組みが理解できません。あなたの '$ username'をプレースホルダで置き換えることが目標です。その後、そのプレースホルダに変数をバインドします。あなたは、準備されたステートメントの例についてgoogleをし、それに従ってコードを変更するべきです。 – Twinfriends

+0

ベストソリューションを提供する[回答を受け入れる](http://stackoverflow.com/help/accepted-answer)の習慣を身につけてください。 このウェブサイトは双方向で動作します。あなたを助けてくれる人に返信しないと、将来は多くの助けを得ることはできません。 また、回答を受け入れるという評判も得られます。 @Mirthful – Qirel

答えて

0

ここでは二つの問題

  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 
    } 
} 
0

mysqli_stmt_bind_result()へのお電話が間違っていると思います。私は二つのことをお勧めします。

  1. あなたのSQL文のテキストで指定する各列のパス1つのPHP変数を、あなたの列を列挙する。

あなたのmysqli_stmt_bind_result()が書かれている通り、コードにはテーブルにuser_nameという1つの列がある場合にのみ機能します。

関連する問題