2017-04-18 9 views
0

PHPでPDOを使用してSQL文を作成する必要があり、WHERE句の値の数は動的です。PDO SQL文にWHEREパラメータを動的に追加します

この場合

SELECT column1, column2 FROM table WHERE category = :category OR category = :category 

私は比較するんだけど、それは私がちょうど使用することはできません2つ以上の可能性がwhere句で2つのカテゴリがあります:カテゴリ1と:カテゴリ2の名前としては。

私は次のことを試してみましたが、それは "一般的なエラー:2031" 与えているメッセージ

$where = array("category = :category", "category = :category"); 
    $params = array("abc", "xyz"); 
    $query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
    $s= $h->prepare($query); 
    $s->setFetchMode(PDO::FETCH_ASSOC); 
    $s->execute(array_values($params)); 

に任意の提案を?

答えて

0

多くのカテゴリがある場合、あなたはあなたの配列にバインドする方法については、こちらを見ることができ

SQL IN文を使用します。 Can I bind an array to an IN() condition?

+0

お返事ありがとうございます。 IN()状態を調べます。 – user1480951

+1

これは回答ではなく重複フラグとして掲示されているはずです。 – Shadow

+0

@Shadow OPが 'IN'ステートメントを知らない場合、OPにパラメータをバインドする方法を検索することはできません。 – blue112

-1

は声明でに関するコメントの上を参照してください、しかし、あなたの場合の場合には(?):

もっとデため、ここで読む
$where = array("category = ?", "category = ?"); 
$params = array("abc", "xyz"); 
$query = "SELECT column1, column2 FROM table WHERE ". implode(" OR ", $where); 
$s= $h->prepare($query); 
$s->setFetchMode(PDO::FETCH_ASSOC); 
$s->execute($params); 

まだあなたが使用疑問符のいずれかすべきか、各PDOの擬似変数に固有の名前を作成し、動的に生成された部分を使用することを計画テール:http://php.net/manual/en/pdo.prepare.php

+0

あなたの声明に部分的には正しかったですが、投稿しているコードにもっと注意を払う必要があります –

関連する問題