2013-02-27 93 views
0

我有一个查询失败它似乎是AND语句失败。MySQL和声明失败

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' 

这个查询searchs评论和子句的工作,却忽略FNAME和LNAME

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

不任何人有一个建议,这是(我)没有

谢谢

加里

+0

定义“失败”。 – 2013-02-27 20:19:52

回答

1

您需要包括周围的相应部分的括号。也许像这样:

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

谢谢你的回应,看起来像你的答案和Aarolama的是一样的,它的工作完美。 – Gary 2013-02-27 22:44:56

+0

@Gary - np,很高兴我们可以帮忙! – sgeddes 2013-02-27 23:07:56

1

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

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

Documentation

+1

+1 ......因为感叹 – Taryn 2013-02-27 20:21:27

+0

对不起,延迟(服务器停机),像一个魅力工作......感谢您的帮助。 – Gary 2013-02-27 22:42:05

+0

bluefeet - 我已经写了一半的问题,并尝试了另一个版本,并认为更好的信息越多。 – Gary 2013-02-27 22:46:25