PHP 关键字搜索多个字段填充新输入

标签 php mysql

我有一个 HTML 输入字段,其中的值被分解并由字符串中的每个空格分隔。然后,该字符串在数据库中搜索匹配项,如果存在匹配项,则返回值,但我想从原始字符串中搜索一个表中的多个字段。

希望这能解决问题:

例如,如果用户搜索“Sheldon 男孩套头衫”,我希望数据库在数据库的每个字段中搜索每个关键字的匹配项,例如 [school_name]、[sex]、[product_type]。目前,我正在对一个字段进行此操作,但我想返回并收集所有三个字段的值。

这是我的代码:

  if (empty($_POST) === false) {
    if(empty($_POST['title']) === true) {
    $no_data = '<div class="alert alert-danger center">Please enter a title</div>';
    } else {        
        $item_title = $_POST['title'];
        $keywords = explode(" ", $item_title);


        $query = "SELECT * FROM products WHERE ";
        foreach($keywords as $keyword) {
            $i++; // dump variable

            if($i == 1) { $query .= "product LIKE '$keyword' "; } 
                   else { $query .= "OR product LIKE '$keyword' "; }
        }
        $query = mysql_query($query);
        $numrows = mysql_num_rows($query);


        $row = mysql_fetch_assoc($query);
        echo $row['product'];
    }
}

最佳答案

为了安全和方便,您确实希望使用 PDO。无论哪种方式,您仍然需要准备一份声明。

$fields = array('fields','you','want','to','search');
foreach($keywords as $keyword) {
    foreach ($fields as $field) {
    $i++; // dump variable
    if($i == 1) {
        $query .= "$field LIKE '$keyword' ";
    } else {
        $query .= "OR $field LIKE '$keyword' ";
    }
}

$i == 1 是弱 true。您可以设置 $i = false,然后设置 if($i === true),从而不必为每个循环递增变量。或者,在每行的末尾而不是开头使用 OR,以及最终查询字符串中的最后一个 OR 实例。这也会从每个循环中删除 if。

$fields = array('fields','you','want','to','search');
foreach($keywords as $keyword) {
    foreach ($fields as $field) {
        $query .= "$field LIKE '$keyword' OR ";
    }
}
$query = substr($query, 0, strlen($query) - 4);

关于PHP 关键字搜索多个字段填充新输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006532/

相关文章:

php - GD imagejpeg() 压缩?

php - 在 ajax 请求回调中显示 PHP 错误

mysql - 设计我的第一个数据库模式 : suggestion needed

mysql - memcached数据会在内存中停留多久

mysql - 使用存储过程插入mysql时,将两列相乘并将结果放入第三列

php - Codeigniter *多图像上传*保存到数据库问题

PHP对象父/子递归

javascript - PHP 未显示在 Chart.js 的数据部分中

PHP,从mysql加载时间戳并转换为时间前字符串

php - 如果两个表中都存在相同的 ID,如何隐藏选择下拉列表中的选项