2013-05-26 105 views
5

至少這似乎正在發生。我試圖爲一個網站創建一個搜索欄,它確實起作用,除非它沒有閱讀只會撤回批准內容的where子句。你可以看看爲什麼這會成爲一個問題。codeigniter like子句覆蓋where子句

無論如何,這是我在我的模型

$match = $this->input->post('search');  
$this->db->where('approved', 'y'); 
$this->db->like('description', $match); 
$this->db->or_like('title', $match); 
$this->db->or_like('body', $match); 
$this->db->or_like('author', $match); 

$query = $this->db->get('story_tbl'); 

return $query->result(); 

,當我打印出來的查詢,好像它看到的where子句,但是當我得到的東西回來它拉的東西都是未獲批准或正在接受審查。

這裏是我打印出來的查詢

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND `description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%' 

回答

2

您的查詢應該是

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND (`description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%') 

檢查這些括號。所以,你最好的選擇是使用普通的$this->db->query()。如果你堅持使用的活動記錄,你必須做這樣對於那些括號 -

$match = $this->input->post('search'); 
$this->db->where('approved', 'y'); 
$this->db->where("(`description` LIKE '%$match%'"); 
$this->db->or_where("`title` LIKE '%$match%'"); 
$this->db->or_where("`body` LIKE '%$match%'"); 
$this->db->or_where("`author` LIKE '%$match%')"); 
$query = $this->db->get('story_tbl'); 

編輯:

true AND true OR true OR true //true 
false AND true OR true OR true //true just like your where clause is ignored 
false AND false OR false OR true //Still true 
false AND true OR false OR false //false 
false AND false OR false OR false //false 

所以這個查詢將返回所有行其中批准=「Y 'OR其中標題,正文,作者匹配 '另一個'

在我發佈查詢

true AND (true OR true OR true) //true 
false AND (true OR true OR true) //false, where clause is checked 
true AND (false OR false OR false) //false 
true AND (true OR false OR false) //true 

這將返回批准的行='y',並且標題或正文或作者或描述匹配'另一個'。我相信這是你想達到的。

+0

我爲什麼要這些括號?這就是codeigniter如何將它打印到頁面上,而我上面提到的querry仍然忽略了我的第一個where子句。我很困惑爲什麼在活動記錄上使用$ this-> db-> querry會更好? – zazvorniki

+0

由於沒有括號,where子句被忽略。您需要了解AND和OR的工作方式。 – sakibmoon

+0

我明白他們是如何工作的,但是當我粘貼上面的代碼時,它給了我一個500錯誤。即使在我的sql編輯器中輸入上面的查詢語句時,「符號不應該有所作爲」 – zazvorniki