2013-09-29 105 views
0

我的應用程序允許搜索文章。因此,當用戶輸入字符串「articlex」時,查詢將起作用&結果顯示,但當輸入多個單詞「articlex articley」時,該查詢不會顯示任何結果。使用「LIKE」在mysql查詢中匹配多個單詞

Cuurently我使用這個查詢

$querySub = 'SELECT * FROM table WHERE (col1 LIKE "%'.$search_string.'%") OR (col2 LIKE "%'.$search_string.'%") OR (col3 LIKE "%'.$search_string.'%")'; 

$search_string僅包含由用戶輸入

我怎樣才能使查詢適用於多個單詞呢?

+1

您最好在'PDO'上使用**準備好的語句**。您當前的代碼允許** SQL注入**攻擊。 – mpyw

+0

如果我使用mysql_real_esacep_string(),它會保護它嗎? – user1477731

+0

是的,但'mysql _ **'函數**已棄用**。看到這裏http://www.php.net/manual/en/function.mysql-real-escape-string.php你可以選擇'Mysqli'或'PDO'。我建議你'PDO'。 – mpyw

回答

-1

您可以使用REGEXP這個perpose .....或者如果你想多詞搜索中,那麼你需要在使用空間爆炸搜索字符串,然後使用LIKE

 if you search "articlex articley" then it will search whole word in LIKE operator 
0

從表中搜索此字符串像查詢變量,你可以使用

SELECT * FROM表,其中在個關鍵字LIKE '%{$ to_be_searched}%'

0

只用一個 「%」 e結束。像

$querySub = SELECT * FROM table WHERE (col1 LIKE '$search_string%'"); 

這將搜索既 「articlex」 和 「articley」

1

示例PDO

/* Assume $pdo is already prepared as PDO instance. */ 

// search query split by spaces 
$user_input = 'foo bar baz'; 

// create string for PDO::prepare() 
$sql = 'SELECT * FROM testTable WHERE '; 
$wheres = $values = array(); 
foreach (array_filter(explode(' ', $user_input), 'strlen') as $keyword) { 
    $wheres[] = 'col1 LIKE ?'; 
    $values[] = '%' . addcslashes($keyword, '%_\\') . '%'; // this is escape for LIKE search 
} 
$sql .= $wheres ? implode(' OR ', $wheres) : '1'; 

// bind values and execute 
$stmt = $pdo->prepare($sql); 
$stmt->execute($values); 

示例mysql_**功能(廢棄)

/* Assume $link is already prepared as MySQL resource. */ 

// search query split by spaces 
$user_input = 'foo bar baz'; 

// create string for mysql_auery() 
$sql = 'SELECT * FROM testTable WHERE '; 
foreach (array_filter(explode(' ', $user_input), 'strlen') as $keyword) { 
    $wheres[] = 'col1 LIKE ' . mysql_real_escape_string(
     '%' . addcslashes($keyword, '%_\\') . '%', 
     $link 
    ); 
} 
$sql .= !empty($wheres) ? implode(' OR ', $wheres) : '1'; 

// execute 
$result = mysql_query($sql, $link); 
0

delimite ř// CREATE PROCEDURE proc_advancesearch(IN p_data VARCHAR(80),IN act_mode VARCHAR(10))

開始

申報p_s_data VARCHAR(250); SET sql_mode ='NO_ENGINE_SUBSTITUTION';

set p_s_data = REPLACE(p_data,'','%'); set p_s_data = concat('%',p_s_data,'%');

選擇prodtmappid,ProId,產品名稱,FinalPrice,fn_image(prodtmappid)作爲圖像從tblproductmapforlisting 其中ProStatus = 'A' 和( CONCAT(產品名稱, ' '名優產品,'',CatName)等(p_s_data)

或產品名稱等的concat(P_DATA, '%'))基團通過tblproductmapforlisting.ProId爲了通過propriority ASC;

end