我正在编写一个带有分页的搜索脚本,但无法让它正常工作。
这是我的查询:
$query = "SELECT COUNT(*) FROM server_data WHERE trash = '0' AND server_address LIKE '%$search%' OR title LIKE '%$search%' OR short_desc LIKE '%$search%'";
这是统计数据库中有多少条结果。
这是我对实际数据的查询:
$query = "SELECT * FROM server_data WHERE trash = '0' AND server_address LIKE '%$search%' OR title LIKE '%$search%' OR short_desc LIKE '%$search%' ORDER BY id DESC $limit";
出于某种原因,这会返回trash = 1 和trash = 0 的结果,而显然它应该只返回trash = 0 的结果。有人知道为什么会发生这种情况吗?
最佳答案
使用括号
$query = "SELECT * FROM server_data WHERE trash = '0' AND (server_address LIKE '%$search%' OR title LIKE '%$search%' OR short_desc LIKE '%$search%') ORDER BY id DESC $limit";
如果没有括号,您的查询将按如下方式计算:
$query = "SELECT * FROM server_data WHERE (trash = '0' AND server_address LIKE '%$search%') OR title LIKE '%$search%' OR short_desc LIKE '%$search%' ORDER BY id DESC $limit";
原因是 AND
比 OR
“强”(就像数学中乘法比加法更强:3*5+3=15+ 3=18)。
顺便说一句。请确保 $search
已正确转义,否则您将允许 SQL 注入(inject)。
关于php - SQL查询条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352903/