作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 PHP 中使用 PDO 对象来运行 MYSQL 查询,我似乎在将 IN() 子句与 PDO::Prepare() 一起使用时遇到了问题。
用户输入:用逗号分隔的标签
例如)篮球,足球
我编写以下代码:
$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() ?
最佳答案
你需要做一些像 AND t.tag IN (:tag1, :tag2)
现在它认为您正在文本中查找 "basketball","football"
为此,您可以使用 PHP 的字符串追加和循环来创建查询生成器 :)
关于PHP 问题 : PDO Prepare() and Execute() with MYSQL IN() not working for arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444359/
我是一名优秀的程序员,十分优秀!