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() を使用する方法はありますか?