php - mysql IS NULL/LIKE %% 条件

标签 php mysql

我正在处理一个给我带来困难的查询。

基本上,我的数据库 race 中有一列包含动态值(这些示例不是真正的交易内容,但代码是相同的)。

race 可以为 NULL(不需要特定的种族) 或 race 可以包含 1 个或多个值(“human,lizard,dog”等)

我的查询是:

$var = $db->Query('SELECT * FROM table WHERE race LIKE "%'.$specie.'%"OR race IS NULL');

但是,这是行不通的。这条语句的流程中是否有错误会使查询不返回任何内容? (显示默认的“空结果”)

编辑:用英语我希望我的查询说“如果找到特定种族,或者根本没有种族要求(空),请选择所有数据”

最佳答案

也许您对FIND_IN_SET()感兴趣,假设您的可能值以逗号分隔存储:

$var = $db->Query('SELECT * 
                   FROM table 
                   WHERE 
                       FIND_IN_SET("' . $specie . '", race)
                       OR race IS NULL
                  ');

此处适用标准备注:

  • 不要相信用户输入。始终使用 prepared statements处理输入变量。 SQL injection不好!<​​/li>
  • 优化您的数据库以提高性能并更精确地制定查询! race 可以在自己的表中,在它们之间使用 N:M 关系。

关于php - mysql IS NULL/LIKE %% 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375028/

相关文章:

php - MySQL 看似随机返回空集

php - 如何在 PHP OOP 中调用另一个函数内部的函数

mysql - 使用 mysql CONVERT_TZ 仅包含时间,而不包含日期

php - 获取两点之间的坐标?

php - 安全地存储用户凭证 token

php - 用于在 PHP 环境中部署 Haxe 的 Web "frameworks"?

PHP开发服务器: $HTTP_RAW_POST_DATA is not populating $_POST. ..怎么来的?

mysql - 如何取回 MySQL/MariaDB 中更新的所有行

mysql - rails : how to find all users older then n minutes ago where n is stored in joined group

php - php 推荐函数的奇怪行为