$term = $_POST['term'];
$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'");
這是我用來從文本輸入框中取值並搜索我的數據庫的代碼的一部分。但是我想改變它,以便代替%$ term%它循環遍歷數組,以便搜索多個選定的項。使搜索腳本循環遍歷數組而不是文本輸入值
任何幫助理解
-Matt
$term = $_POST['term'];
$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'");
這是我用來從文本輸入框中取值並搜索我的數據庫的代碼的一部分。但是我想改變它,以便代替%$ term%它循環遍歷數組,以便搜索多個選定的項。使搜索腳本循環遍歷數組而不是文本輸入值
任何幫助理解
-Matt
可以通過通過陣列循環構建搜索表達。
$search = '';
foreach ($_POST['term'] as $term) {
$search .= " OR '$term'";
}
$search = preg_replace('/^ OR/', '', $search); // remove first OR
// Ingredients LIKE $search
但要注意,你應該使用預處理語句,而不是像這樣的表述,以避免SQL注入。
希望有所幫助。
檢出MySQL's MATCH功能可以最有效地完成此操作。你會希望把一個全文索引的列,然後你可以使用複雜的搜索,如:
SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$');
而不是增加複雜的邏輯和查詢的建築,一個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')";
完美的工作,非常感謝。 – MattHeywood 2012-04-19 23:59:39