2016-02-06 162 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