2011-06-22 8 views
1

PHPでPDOオブジェクトを使用してMySQLクエリを実行していますが、IN() PDO :: Prepare()を使用してください。

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

私は、次のコード:PHP質問:PDOのPrepare()とExecute()でMYSQL 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); 

私が理解から、実行()は、二重引用符で各変数をラップします( ")ので、私は手動でのような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()を使用しますか?

答えて

1

あなたはAND t.tag IN (:tag1, :tag2)

ような何かをする必要があります今、それはあなたがテキストでこれを行うには"basketball","football"

を探していると思うあなたは、PHPの文字列を使用してクエリジェネレータを行うことができます追加し、ループ:)

+0

ありがとうございます。私はそれをする必要はないと望んでいたが、それはそのように働く:) – Ripptor