我在 PHP 中使用 PDO 对象来运行 MYSQL 查询,我似乎在使用带有 PDO::Prepare() 的 IN() 子句时遇到了问题。
用户输入:用逗号分隔的标签
ex) 篮球,足球
我编码如下:
$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() ?