0

我有一个失败的查询 它似乎是失败的 AND 语句。

if(isset($_POST['sea']) && $_POST['sm'] !==''){
$sm = trim($_POST['sm']);
$sql = "SELECT * FROM `memorials` WHERE `fname` LIKE '$sm%' OR `lname` LIKE '$sm%' OR    `comments` LIKE '$sm%' AND `status` = '2' ";
$q = $conn->prepare($sql);
$q->execute();

我已添加\删除 backticks,'status = '2' 失败。

以下语句在 phpmyadmin 中有效

SELECT * FROM `memorials` WHERE `fname` LIKE 'test%' AND status = '2'

此语句在 phpmyadmin 中失败

SELECT * FROM `memorials` WHERE `fname` LIKE 'test%' OR `lname` LIKE 'test%' AND status = '2'

此查询搜索注释 AND 子句有效,但忽略 fname 和 lname

$sql = "SELECT * FROM memorials WHERE `fname`  OR  `lname`  OR `comments`  LIKE '$sm%'  AND status = '2'    ";

有没有人建议这是(我)失败的地方

谢谢

加里

4

2 回答 2

1

运算符优先级在这里很重要。您需要添加一些括号:

SELECT * 
FROM   `memorials` 
WHERE  ( `fname` LIKE '$sm%' 
          OR `lname` LIKE '$sm%' 
          OR `comments` LIKE '$sm%' ) 
       AND `status` = '2' 

文档

于 2013-02-27T20:20:23.600 回答
1

您需要在适当的部分周围加上括号。也许是这样的:

SELECT * 
FROM `memorials` 
WHERE (`fname` LIKE 'test%' OR `lname` LIKE 'test%') AND status = '2'
于 2013-02-27T20:19:36.410 回答