【发布时间】:2015-05-08 19:46:06
【问题描述】:
我做了一个搜索功能并让它工作,但我有一个问题: 如果我输入 1 个单词(让我们说“测试”),它可以正常工作并找到包含“测试”的行。但如果我输入“测试其他东西”,它就找不到任何东西。
如何让脚本搜索 $_POST['search'] 中的每个单词??
这是我的代码:
$itemOutput = '';
$dbhandle = mysql_connect('host', 'name', 'pass') or die("Unable to connect to MySQL");
$selected = mysql_select_db('my_website_db', $dbhandle) or die("Could not select database");
$search_term = mysql_real_escape_string($_POST['search']);
if (!isset($search_term) || $search_term == '' || $search_term == ' ' || !ctype_alpha($search_term)) { $result_count = "0"; } else {
$fetch_items = mysql_query("SELECT * FROM products WHERE name LIKE '%{$search_term}%' OR short_info LIKE '%{$search_term}%'");
while($shop_items = mysql_fetch_array($fetch_items)) {
$item_id = $shop_items['id'];
$item_name = $shop_items['name'];
$item_price = $shop_items['price'];
$item_image = $shop_items['image']; }
$itemOutput .= '<div class="item-box"> <img src="'.$item_image.'" class="item-image" />';
$itemOutput .= '<div class="item-price"> <a style="padding-left: 15px; font-size: 14px; padding-top: 3px;">Kun </a> <a><b>'.$item_price.' kr.</b></a> </div> <br>';
$itemOutput .= '<div class="item-name"> <a>'.$item_name.'</a> </div> <br>';
$itemOutput .= '<a href="vare.php?id='.$item_id.'"><button class="item-button">Køb her ></button></a> </div>';
}
编辑:感谢所有的投入,我才开始工作:)
【问题讨论】:
-
请stop using
mysql_*functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's not as hard as you think。 -
拆分术语并将每个单词附加到它自己的
like动态分组中。例如$query .= '(name LIKE '%{$search_term}%' OR short_info LIKE '%{$search_term}%') or '; //strip the last "or" as well保留转义或更好地使用支持准备好的语句的驱动程序。 -
每个单词还是按这个顺序排列的每个单词?如果按照该顺序,只需将空格替换为@chris85 建议的任何顺序
-
@xQbert 应该是 $_POST['search'] 中的每个单词
-
考虑使用 explode 将字符串拆分为一个数组,然后使用 or 语句连接搜索条件,所有语句都包装在一起循环遍历数组并构建 or 语句(尽管速度很慢,并且每个添加的单词都会变得更糟由于多个 OR 语句......)也许你可以使用全文搜索
match against语法来代替