8
我使用Laravel 4,並建立了下面的查詢轉義字符串:對MySQL的全文搜索使用
if(Input::get('keyword')) {
$keyword = Input::get('keyword');
$search = DB::connection()->getPdo()->quote($keyword);
$query->whereRaw("MATCH(resources.name, resources.description, resources.website, resources.additional_info) AGAINST(? IN BOOLEAN MODE)",
array($search)
);
}
此查詢運行正常使用情況下正常,但是,如果用戶輸入一個字符串,如++
,會引發錯誤。看看MySQl docs,有一些關鍵字,如+
和-
,它們有特定的用途。有沒有一個函數可以將字符串中的這些類型的特殊字符轉義出來,因此可以像上面那樣在全文搜索中使用,而不會引發任何錯誤?
這裏是一個被拋出一個錯誤的例子:
{"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected '+' (SQL: select * from `resources` where `duplicate` = 0 and MATCH(resources.name, resources.description, resources.website, resources.additional_info) AGAINST('c++' IN BOOLEAN MODE))","file":"\/var\/www\/html\/[...]\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php","line":555}}
解決方案我已經試過:
$search = str_ireplace(['+', '-'], ' ', $keyword);
$search = filter_var($keyword, FILTER_SANITIZE_STRING);
$search = DB::connection()->getPdo()->quote($keyword);
我假設我將需要使用正則表達式。這裏最好的方法是什麼?
你會想逃避,而不是刪除。 – rmobis 2014-10-22 14:45:59
對,那會更好。是否有任何函數會轉義像'+'和'-'這樣的特殊字符? – chipit24 2014-10-22 14:55:55
但是,如果這些特殊字符被轉義,它們會在搜索中有用嗎? – chipit24 2014-10-22 14:59:05