在我的數據庫中,我有一堆產品。在我的產品表我有一個名爲active
欄默認爲1
(這意味着它是「積極」)當我刪除產品,而不是刪除該行的我只是改變活動列0
Codeigniter DB選擇邏輯錯誤
我也有一個搜索功能通過名稱或描述等搜索產品。我使用codeigniter作爲框架。這是代碼我有生成查詢:
$search_query = $this->db->from('company_products')
->where('company_products.active', 1)
->or_like(array('name'=> $keywords, 'model'=> $keywords, 'brand'=> $keywords, 'description'=> $keywords))
->order_by('id', 'RANDOM')
->get();
此代碼生成此MySQL查詢:
SELECT `company_products`.*
FROM (`company_products`)
WHERE `company_products`.`active` = 1
AND `name` LIKE '%chair%'
OR `model` LIKE '%chair%'
OR `brand` LIKE '%chair%'
OR `description` LIKE '%chair%'
「刪除」的產物(改變有源列0)的產物仍然顯示後在搜索結果上。這就是我懷疑是怎麼回事的代碼:
(SELECT a product WHERE active = 1 - AND - name LIKE %search_string%)
- OR -
(SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE brand LIKE %search_string%)
- OR -
(SELECT a product WHERE description LIKE %search_string%)
但是,這是我想要的東西:
(SELECT a product WHERE active = 1)
- AND -
{ (SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE brand LIKE %search_string%)
- OR -
(SELECT a product WHERE description LIKE %search_string%) }
我希望我的僞代碼是不是太混亂。我想用codeigniter的活動記錄類來完成這個任務。
你會爲安全做些什麼?逃避$關鍵字?用htmlspecialchars? 由於SQL注入等先前存在的安全性,我喜歡活躍的記錄。 – Xecure
我可能是錯的,但我相信,因爲活動記錄仍然在構建查詢,它仍然像以前一樣使用它的方式逃脫。 –