2012-05-24 16 views
5

ここでの目標は、(PHPで)変数を取得し、mysqliで準備されたステートメントで使用し、次にfetch_assocで使用できるようにすることです。何らかの理由で、このコードは動作しません(エラーはありません)。私はrtmを持っていて、fetch_assocと準備されたステートメントを組み合わせたものは何も見つかりませんでしたので、可能かどうかはわかりません。この作業を得るための助けに感謝します、私のコードは現在です。 mysqli->prepareのためのPHPのウェブサイトのページからfetch_assocでmysqli prepared statement

$where = $_GET['section']; 
      $mysqli = mysqli_connect("localhost", "root", "","test"); 

      if($stmt = mysqli_prepare($mysqli,"SELECT title, img, active, price FROM ? ORDER by ID limit 5 ")){ 
       mysqli_stmt_bind_param($stmt, 's', $where); 
       mysqli_stmt_execute($mysqli); 
       mysqli_stmt_fetch($mysqli); 
       while($row = mysqli_fetch_assoc($stmt)){ 
        if($row['active']=="yes"){ 
         echo 'the rest of my stuff goes here'; 
+0

動的テーブルの選択は、通常は悪いデザインの指標である私が見る –

答えて

5

(重点を置いて最も関連性の高い部分に追加):

注:

マーカーは、SQLステートメント内の特定の場所で有効です。 の例では、INSERTステートメント のVALUES()リスト(行の列値を指定する)、または比較値を指定するWHERE節の列 との比較で使用できます。

しかし、それらは名前の列が) SELECTステートメントによって返される、または両方のオペランドを指定するには、選択リストには、(例えばテーブルやカラム 名など)の識別子のために許可されていません=等号のような2進演算子 。後者の制限が必要なのは、 はパラメータタイプを決定できないためです。一般に、 パラメータはデータ操作言語(DML) ステートメントでのみ有効で、データ定義言語(DDL)ステートメントでは有効ではありません。

この問題を回避できるとすれば、mysqliの使用は少し混乱します。パラメータを正しくバインドして実行しますが、結果には2つの異なる方法が混在しています。どちらの

  1. 使用mysqli_stmt_get_resultは、結果セットフェッチすると、あなたのバインド変数に次の結果セットをフェッチするためにmysqli_stmt_fetchを使用し、その後mysqli_stmt_bind_resultであなたの結果に結合することでmysqli_fetch_assoc、または
  2. を使用し、そして。 (通常は、while(mysqli_stmt_fetch($stmt)){ //do stuff here }
+0

を、ありがとう私は私のデータベースを次に再設計されると思います – PinheadLarry

+0

@PinheadLarryさて、あなたのサンプルコードであなたの使用がかなり正しいように見えないので、私は準備されたステートメントを使用することについて少し追加しました。 – Gareth

-1

別の方法のスタイルのようなものを使用して結果を反復処理したい、私たちは以下のことを書くことができます:。

$mysqli=new mysqli("host","user","pass","db"); 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param('s', $variable); 
$stmt->execute(); 
$result = $stmt->get_result(); 
while($row = $result->fetch_assoc()){ 
.... 
} 
関連する問題