PHP问题:带有MYSQL IN()的PDO Prepare()和Execute()不适用于数组



我在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") 
)

然而,这对我不起作用。在使用sqlIN()子句时,是否有任何方法仍然使用PDO的prepare()和execute()?

您需要执行类似AND t.tag IN (:tag1, :tag2) 的操作

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

要做到这一点,您可以使用PHP的字符串附加和循环来创建查询生成器:)

最新更新