【问题标题】:MySQL search script not working as expectedMySQL 搜索脚本未按预期工作
【发布时间】: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 &nbsp;></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 语法来代替

标签: php mysql


【解决方案1】:

如果您使用 ctype_alpha() 过滤 search_term,那么您将得到 $result_count = 0。ctype_alpha() 只允许 [a-zA-Z]。放入一个空格会使返回错误。

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 2017-12-18
    • 1970-01-01
    • 2017-05-12
    • 2018-10-17
    • 1970-01-01
    • 2016-09-07
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多