2015-05-27 27 views
0

我正在更新一個以前的管理員創建的網站。它大部分是過時的PHP代碼,但有太多改變,所以我正在與我有。MySQL錯誤1210:反對的參數不正確

我想運行一個搜索查詢如下;

$term = trim($_REQUEST['term']); 
$searchterm = mysql_real_escape_string($term, $link); //link to db 

$sql = "SELECT DISTINCT party_id 
FROM vw_ft_search WHERE 
MATCH (party_name) 
AGAINST ('+$searchterm' IN BOOLEAN MODE)"; 

這總是會拋出下面的錯誤;

MySQL錯誤1210:不正確的參數AGAINST

我看了其中建議使用一個字符串指令here(我想我?)。當我回顯$searchterm時,它顯示了正確的搜索詞(在這種情況下爲'Charles')。

我也嘗試使用手動字符串運行查詢,如下所示,但結果相同;

$sql = "SELECT DISTINCT party_id 
FROM vw_ft_search WHERE 
MATCH (party_name) 
AGAINST ('%Charles%' IN BOOLEAN MODE)"; 

這是關於查詢,查看,變量?

任何方向表示讚賞。很新的PHP/MySQL。

+0

如果刪除'%'符號會發生什麼? – frz3993

+0

通配符與'LIKE'一起使用,對於全文搜索,它應該是星號。我甚至沒有使用通配符來用一個單詞進行全文搜索。 – frz3993

+0

而對於mysql全文搜索,你不能在最左邊的字符之前放置通配符。 – frz3993

回答

1
$term = trim($_REQUEST['term']); 
$searchterm = mysql_real_escape_string($term, $link); //link to db 

添加*,如果你也想對陣CharleskCharlesd

$searchterm = $searchterm.'*'; 
$sql = "SELECT DISTINCT party_id 
FROM vw_ft_search WHERE 
MATCH (party_name) 
AGAINST ('$searchterm' IN BOOLEAN MODE)"; 

而且也提防可以發現here的停止字。與停用詞匹配將不會返回任何內容。

+0

這不是再次設置變量。這是串聯通配符。我測試了這一點,與你唯一的區別是我沒有使用'mysql_real_escape_string'因爲我使用了準備語句。我想你的代碼中的其他地方。 – frz3993

+0

感謝您的幫助!我現在簡單地將我的查詢更改爲更簡單的查詢。類似於你的'SELECT * FROM vw_ft_search WHERE party_name LIKE%Charles%'建議。接受答案。 –

相關問題