1

我在 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() ?

4

1 回答 1

1

你需要做类似的事情AND t.tag IN (:tag1, :tag2)

现在它认为你正在寻找文本"basketball","football"

为此,您可以使用 PHP 的字符串追加和循环来生成查询:)

于 2011-06-22T18:04:56.037 回答