2012-04-19 86 views
1
$term = $_POST['term']; 

$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'"); 

這是我用來從文本輸入框中取值並搜索我的數據庫的代碼的一部分。但是我想改變它,以便代替%$ term%它循環遍歷數組,以便搜索多個選定的項。使搜索腳本循環遍歷數組而不是文本輸入值

任何幫助理解

-Matt

回答

0

可以通過通過陣列循環構建搜索表達。

$search = ''; 
foreach ($_POST['term'] as $term) { 
    $search .= " OR '$term'"; 
} 
$search = preg_replace('/^ OR/', '', $search); // remove first OR 

// Ingredients LIKE $search 

但要注意,你應該使用預處理語句,而不是像這樣的表述,以避免SQL注入。

希望有所幫助。

+0

完美的工作,非常感謝。 – MattHeywood 2012-04-19 23:59:39

0

檢出MySQL's MATCH功能可以最有效地完成此操作。你會希望把一個全文索引的列,然後你可以使用複雜的搜索,如:

SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$'); 
0

而不是增加複雜的邏輯和查詢的建築,一個FULLTEXT屬性添加到表,並做了充分的文本搜索因爲它:

CREATE TABLE `tblCocktail` (
`id`   INT NOT NULL AUTO_INCREMENT, 
`Ingredients` VARCHAR(255) 
    ... 
PRIMARY KEY (`id`)), 
FULLTEXT(`Ingredients`) 
ENGINE = MyISAM; 

... 

$terms = implode($term_array); // todo: protect against injection here too 
$query = "SELECT * 
      FROM `tblCocktail` 
      WHERE MATCH(`Ingredients`) AGAINST ('$terms')";