1
$term = $_POST['term'];

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

这是我用来从文本输入框中获取值并搜索我的数据库的代码的一部分。但是我想改变它,而不是%$term%它循环遍历一个数组,以便能够搜索多个选定的术语。

任何帮助表示赞赏

-马特

4

3 回答 3

0

您可以通过遍历数组来构造搜索表达式。

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

// Ingredients LIKE $search

但请注意,您应该使用准备好的语句而不是使用这样的表达式来避免 SQL 注入。

希望有帮助。

于 2012-04-19T23:52:00.357 回答
0

查看MySQL 的 MATCH功能以最有效地完成此操作。您需要在列上放置全文索引,然后可以使用复杂的搜索,例如:

SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$');
于 2012-04-19T23:54:30.047 回答
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')";
于 2012-04-19T23:57:31.260 回答