我正在做一个让我很难受的问题。
基本上,我的数据库中有一个列race
包含一个动态值(这些示例不是真正的交易内容,但代码是相同的)。
race可以为空(不需要特定的race)
或者种族可以拥有一个或多个价值观(“人类、蜥蜴、狗”等)
我的问题是:$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不好!
优化您的数据库以获得性能并更精确地制定查询!种族可以在自己的表中,使用
N:M
之间的关系。关于php - mysql IS NULL/LIKE %%条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17375028/