SQL查询忽略WHERE在线='0'

时间:2018-09-05 09:02:26

标签: php sql phpmyadmin

我的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";

3 个答案:

答案 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"