2016-02-06 201 views
0

This is the column搜索列中的單個單詞

我想從列類別的4個單詞中提取一個單詞。例如,我搜索自助餐,並且自助餐廳將顯示餐廳。這是我的代碼到目前爲止,不幸的是它不工作。

的HomeController
public function searchresto(){ 

    $searchinfo = $_POST['searchinfo']; 

    $this->load->model('RestoModel'); 
    $restaurantinfo['restaurantinfo']=$this->RestoModel>searchRestaurant($searchinfo); 

    $this->load->view('pages/searchDisplay',$restaurantinfo); 
} 

RestoModel
public function searchRestaurant($searchinfo){ 

    $sql = "SELECT * FROM restaurants WHERE restoname = '$searchinfo' OR restocuisines = '$searchinfo' OR category = '$searchinfo'"; 
    $result = $this->db->query($sql); 
    $result = $result->result('array'); 

    return $result; 
} 
+0

這就是爲什麼你正常化分貝,像這樣 –

+0

不痛數據你可以做'喜歡「%長期%」'類別。您不應將用戶輸入直接傳遞給SQL查詢。 – chris85

回答

1

首先,消毒的用戶輸入。從不直接從用戶輸入查詢數據庫,因爲這可能會導致SQL Injection.

在對用戶輸入進行sanatizing後,嘗試使用LIKE函數。

例如:

SELECT 'Breakfast, Lunch, Dinner, Buffet, Snack' LIKE '%Lunch%'將輸出1

SELECT 'Breakfast, Lunch, Dinner, Buffet, Snack' LIKE '%NonExistantCategory%'將輸出0


試着改變你的查詢SELECT * FROM restaurants WHERE category LIKE '%$searchinfoSanatized%',其中$searchinfoSanatized是已被過濾輸入/逃脫。

而且,我相信你忘記RestoModel後-$restaurantinfo['restaurantinfo']=$this->RestoModel>searchRestaurant($searchinfo);

+0

如何清理用戶輸入? – Yuki

+0

@Yuki一個簡單的方法是使用你的DB類的轉義函數。看看[這篇文章。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – bnahin

+0

好吧。我會嘗試一下,非常感謝你:D – Yuki