SQL查询忽略WHERE online ='0'[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我的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";
php sql phpmyadmin
3个回答
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子句更改为上面的行,它应该可以正常工作。


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/false table的帖子,你会很快意识到错误。


0
投票

试试这个我的朋友

$sql = "SELECT * from baw.entrys WHERE online = '0' and (title like '%search%' or weight like '%search%') ORDER BY id DESC"
© www.soinside.com 2019 - 2024. All rights reserved.