这个问题在这里已有答案:
我的PHP代码中有一个简单的SQL查询。 %search%是用户能够写入内容的输入。
我的问题是在线='0'被忽略,并且还有数据在线='1'
$sql = "SELECT * from baw.entrys WHERE online = '0' and title like '%search%' or weight like '%search%' ORDER BY id DESC";
如果我接受或离开我的SQL查询,这样就可以了。
$sql = "SELECT * from baw.entrys WHERE online = '0' and title like '%search%' ORDER BY id DESC";
AND
has higher precedence than OR
所以你的第一个WHERE
实际上看起来像
(online = '0' and title like '%search%') or weight like '%search%'
这意味着它将匹配weight
像%search%
的任何行,无论online
的值如何。你真正想要的是:
online = '0' and (title like '%search%' or weight like '%search%')
所以只需将WHERE
子句更改为上面的行,它应该可以正常工作。
$sql = "SELECT * from baw.entrys WHERE online = '0' and (title like '%search%' or weight like '%search%') ORDER BY id DESC";
您需要在OR
语句中使用括号,否则OR
也将包含您的online = '0'
。
您正面临此错误,因为在您的代码中,您查找online
列为0
和title
一样,搜索或者weight
就像搜索一样,如果它发现重量列像搜索一样,它将包括它,无论其他值是什么导致它变为真。
看看这个关于true/false table的帖子,你会很快意识到错误。
试试这个我的朋友
$sql = "SELECT * from baw.entrys WHERE online = '0' and (title like '%search%' or weight like '%search%') ORDER BY id DESC"