2013-02-27 112 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