2014-04-09 55 views
0

我想寫一個簡單的搜索函數,讀取字符串$查詢。sql選擇類似語句與許多或操作數

我的問題是,我可以在select語句中使用多個OR嗎?我試圖搜索一個字符串,看它是否與許多列值匹配,然後打印這些行。

function search($query) { 
    try { 
    $db = db_open(); 

    $sql = "select * from pms where (name like :query) or (state like :query) or 
      (start like :query) or (finish like :query) "; 

    $statement = $db->prepare($sql); 
    $statement->bindValue(':query', $query); 
    $statement->execute(); 
    $pms = $statement->fetchAll(); 

    } catch(PDOException $e) { 
    die("Error: ".$e->getMessage()); 
    } 
    return $pms; 
    } 

這是行不通的,除了當我尋找一個國家。

謝謝

+0

解決,綁定語句中的語法不正確。 '$陳述書> bindValue( ':查詢',$查詢);' 應該是: '$陳述書> bindValue( ':查詢', 「%$查詢%」);' 感謝其他會員發佈建議。他們幫忙整理我的代碼:-) – AngeKing

回答

0

當然。

SELECT * FROM pms WHERE (name LIKE :query) OR (start LIKE :query) OR (finish LIKE :query) 

應該工作得很好。

+0

沒有這個工作:-(。仍然只有狀態正在工作,我會發布整個功能,也許我還有其他的錯誤 – AngeKing

0

1)在表名和列名中使用反引號。
2)使用每個支架或更清楚地瞭解
3)如果您沒有使用綁定,則使用帶引號的wildcat(%)。 嘗試像這樣:

$sql = "select * from `pms` 
where (`name` like '%query%') 
OR (`state` like '%query%') 
OR (`start` like '%query%') 
OR (`finish` like '%query%') "; 
+0

謝謝你的迴應。 select * from pms其中'%$ query%'或狀態'%$ query%'或開始像'%$ query%'這樣的名稱, '或完成'%$ query%'「;' – AngeKing

+0

我以爲你綁定了你的查詢,好吧我正在更新我的答案,如果有幫助,那麼你應該接受我的答案:) –

+0

對不起,我的意思是它沒有'噸工作時,我嘗試綁定使用:查詢.. – AngeKing