2012-01-08 75 views
0

,這裏是來自表Companies欄我的數據cNamePHP檢索全文轉義字符串

CK'Wang Pte Ltd 
Chong Wang Pte Ltd 
CK'Studio Pte Ltd 

這裏是我的查詢

$query = mysql_query("SELECT cName FROM Companies WHERE MATCH cName AGAINST ('+CK\'Wang Pte Ltd' IN BOOLEAN MODE)"); 
$result = mysql_num_rows($query); 

的$結果表明2.如何我只能MATCH 1 (CK'Wang Pte Ltd)而不是2

+2

使用的參數,而不是直接插入SQL,以避免需要在第一時間逃離(避免SQL注入)的 – xQbert 2012-01-08 14:20:37

+0

可能重複[最佳在PHP中停止SQL注入的方法](http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php) – hakre 2012-01-08 14:28:28

回答

1

如果您希望所有的術語在布爾模式下匹配,您需要在每個術語前添加+。查詢的解釋方式,CK是強制性的,所有其他條款是可選的,並且將主要影響結果的排名。

如果您需要從用戶請求構建查詢並匹配所有術語,則需要先將其轉換。

function fulltext_match_all($query) 
{ 
    $final = array(); 
    foreach (array_filter(preg_split('/[\s\'-]+/', $query)) as $word) { 
      $final[] = "+$word"; 
    } 
    $query = implode(' ', $final); 
} 

你最終的查詢會是這個樣子:

SELECT cName FROM Companies WHERE MATCH cName AGAINST ('+CK +Wang +Pte +Ltd' IN BOOLEAN MODE)