【发布时间】:2019-12-30 16:37:54
【问题描述】:
这是我的 SQL 表
当我尝试使用此 mysqli 查询使用 PDO 获取记录时:
SELECT * FROM `TABLE 1` WHERE `tags` = ? LIMIT 25
?被 $_GET 变量替换。
所以例如我想得到这个查询的结果:
SELECT * FROM `TABLE 1` WHERE `tags` = 'a' LIMIT 25
它会加载,而对于其他参数,它不会加载。但是当我在 phpmyadmin 中运行 sql 查询时,查询加载时不会出错(总是)! 有人可以帮我理解为什么会这样吗?
【问题讨论】:
-
存储逗号分隔列表是一种反模式。 amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/… 请注意,没有满足条件
tags = 'a'的行。 MySQL 确实提供了FIND_IN_SET函数...dev.mysql.com/doc/refman/8.0/en/… 例如SELECT FIND_IN_SET('a','a,b,c')例如SELECT t.id, t.tags FROM mytable t WHERE FIND_IN_SET('a',t.tags) ORDER BY t.id -
为什么这被标记为“pdo”?您在 PHP Mysqli" 中声明 "...WHERE 子句。
-
@spencer7593 查看我的问题中的图片,您可以看到第一列和第 7 列的值为“a”。
-
@Dry7 我在答案中添加了一张图片,请看一下!
-
@Mayuresh:第 1 行和第 7 行不满足条件
tags = 'a'。作为演示:SELECT 'a,b,c' = 'a'将返回 0 (FALSE)。我们期望这是因为两个字符串不相等。正如我在之前的评论中建议的那样,我们可以使用 MySQLFIND_IN_SET函数,作为演示SELECT FIND_IN_SET('a','a,b,c')将返回 1。在布尔上下文中评估,非零值被认为是 TRUE。
标签: php mysql pdo where-clause