我的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";
答案 0 :(得分:2)
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
子句更改为类似于上一行,它就可以正常工作。
答案 1 :(得分:0)
$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 。
看看有关true/false table的主题,您很快就会发现错误所在。
答案 2 :(得分:0)
试试这个朋友
$sql = "SELECT * from baw.entrys WHERE online = '0' and (title like '%search%' or weight like '%search%') ORDER BY id DESC"