2016-03-15 19 views
1

我需要一個幫助。我的要求是當用戶在前端的文本框中鍵入字母時,它會自動從數據庫中搜索並相應地給出結果我寫了一些查詢,但它給了我以下錯誤。執行SQL查詢時得到錯誤,通過使用PHP和MySQL的關鍵詞來獲取結果搜索

Error: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%P%) ORDER BY member_id DESC LIMIT 0, 30' at line 1

我的代碼如下。

$searchKey=$_GET['searchKey']; 
$keyword = '%'.$searchKey.'%'; 
$sql =mysqli_query($connect,"SELECT * FROM db_restaurant_basic WHERE rest_name LIKE (:keyword) ORDER BY member_id DESC "); 

我的第一搜索關鍵字詞是p。所以請大家幫我解決這個問題。

+1

您不能使用佔位符的準備聲明。你只是在執行一個純文本查詢。插值可以完成這項工作,但也可以正確地準備好聲明 –

+0

你能解決這個問題嗎? – satya

回答

0

你想

$sql =mysqli_query($connect,"SELECT * FROM db_restaurant_basic WHERE rest_name LIKE '$keyword' ORDER BY member_id DESC "); 

或者,你也可以做

$sql =mysqli_query($connect,"SELECT * FROM db_restaurant_basic WHERE rest_name LIKE '" . $keyword . "' ORDER BY member_id DESC "); 

(:關鍵字)不會在變量拉您的關鍵字到SQL語法和也(:關鍵字)是不是有效的MySQL

+0

好吧,錯誤消失了,但它給出了錯誤的結果。那些'rest_name'列值不是以'P'開頭的。 – satya

+1

Satya因爲你有雙方的%。如果您只想要以關鍵字開頭的名稱,請刪除第一個通配符% –

+0

是的,您是對的,謝謝。 – satya

-1

另一種方法,

$sql =mysqli_query($connect,"SELECT * FROM db_restaurant_basic WHERE rest_name LIKE '".$keyword."' ORDER BY member_id DESC "); 

這是更好地使用相關的地方雙引號內的單引號執行SQL queries.Sometimes當你需要把單引號表名作爲well.Like此,

$sql =mysqli_query($connect,"SELECT * FROM `db_restaurant_basic` WHERE rest_name LIKE '".$keyword."' ORDER BY member_id DESC ");