【问题标题】:Sometimes results are not showing when using WHERE clause in PHP Mysqli [duplicate]在 PHP Mysqli 中使用 WHERE 子句时,有时结果不显示 [重复]
【发布时间】: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)。我们期望这是因为两个字符串不相等。正如我在之前的评论中建议的那样,我们可以使用 MySQL FIND_IN_SET 函数,作为演示 SELECT FIND_IN_SET('a','a,b,c') 将返回 1。在布尔上下文中评估,非零值被认为是 TRUE。

标签: php mysql pdo where-clause


【解决方案1】:

如果您存储逗号分隔值,您可以在查询中使用FIND_IN_SET

    SELECT 
        t.id, t.tags 
    FROM mytable t 
    WHERE FIND_IN_SET('a',t.tags) 
    ORDER BY t.id

否则可以使用通配符

        SELECT 
            t.id, t.tags 
        FROM mytable t 
        WHERE t.tags like '%a%') 
        ORDER BY t.id

【讨论】:

  • 您好,感谢您的回答。我已经尝试了您的两种选择,但仍然没有用。
猜你喜欢
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多