1

PHP で PDO オブジェクトを使用して MYSQL クエリを実行していますが、PDO::Prepare() で IN() 句を使用すると問題が発生するようです。

ユーザー入力: コンマで区切られたタグ
例) バスケットボール、サッカー

私は次のようにコーディングします:

$query = 
"SELECT s.item_id, s.item_type, s.title
FROM search_all s 
WHERE EXISTS ( 
    SELECT t.item_id 
    FROM tags t 
    WHERE t.item_id = s.item_id AND t.item_type = s.item_type 
    AND t.tag IN (:tags) 
)";

$mysql_vars[':tags'] = implode("','",explode(',',$tags));
$stmt = $connection->prepare($query);
$stmt->execute($vars);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

私が理解していることから、execute() は各変数を二重引用符 (") で囲むので、次のような SQL を模倣するために、各入力の間に二重引用符を手動で追加します。

SELECT s.item_id, s.item_type, s.title
FROM search_all s 
WHERE EXISTS ( 
    SELECT t.item_id 
    FROM tags t 
    WHERE t.item_id = s.item_id AND t.item_type = s.item_type 
    AND t.tag IN ("basketball","football") 
)

しかし、これは私にとってはうまくいきません。sql IN() 句を使用しながら、PDO の prepare() および execute() を使用する方法はありますか?

4

1 に答える 1

1

次のようなことをする必要がありますAND t.tag IN (:tag1, :tag2)

今、それはあなたがテキストで探していると考えています"basketball","football"

これを行うには、PHP の文字列の追加とループを使用してクエリ ジェネレーターを実行できます :)

于 2011-06-22T18:04:56.037 に答える