5

ここでの私の目標は、変数(phpを使用)を取得し、それをプリペアドステートメント(mysqliを使用)で使用してから、fetch_assocで使用できるようにすることです。何らかの理由で、このコードは機能しません(エラーなし)。私はrtmを見つけましたが、fetch_assocとプリペアドステートメントを組み合わせたものは何も見つかりませんでした。そのため、それが可能かどうかさえわかりません。これを機能させるための助けをいただければ幸いです。現在の私のコードは次のとおりです。

$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';
4

2 に答える 2

5

mysqli-> prepareのPHPWebサイトページから(最も関連性の高い部分に重点が追加されています):

ノート:

マーカーは、SQLステートメントの特定の場所でのみ有効です。たとえば、INSERTステートメントのVALUES()リスト(行の列値を指定するため)、またはWHERE句の列との比較で比較値を指定することができます。

ただし、識別子(テーブル名や列名など)、SELECTステートメントによって返される列に名前を付ける選択リスト内)、または=等号などの二項演算子の両方のオペランドを指定することはできません。パラメータタイプを判別することは不可能であるため、後者の制限が必要です。一般に、パラメーターはデータ操作言語(DML)ステートメントでのみ有効であり、データ定義言語(DDL)ステートメントでは有効ではありません。

あなたがその問題を乗り越えることができると仮定すると、あなたの使用mysqliは少し混乱しています。パラメータを正しくバインドして実行しますが、結果を得るには2つの異なる方法を混同しています。また

  1. mysqli_stmt_get_result結果セットをフェッチしてからそれを使用するために使用するmysqli_fetch_assoc、または
  2. 結果をでバインドしmysqli_stmt_bind_result、を使用mysqli_stmt_fetchして次の結果のセットをバインドされた変数にフェッチします。(通常、次のようなものを使用して結果を繰り返し処理しますwhile(mysqli_stmt_fetch($stmt)){ //do stuff here }
于 2012-05-24T22:20:30.917 に答える
-2

別の方法のスタイル、私たちはそれを以下に書くことができます:

$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()){
....
}
于 2015-09-08T03:32:26.037 に答える