PHP多关键字搜索功能

PHP多关键字搜索功能,php,mysql,sql,search,select,Php,Mysql,Sql,Search,Select,我创建了一个搜索栏,用户可以在其中输入他们的关键字,表单php代码将输入分解成一个单词数组。然后,我使用foreach循环遍历单词列表,并在数据库中的两个表中搜索匹配短语 主要功能如下: 支持多字输入 如果用户不是管理员,则仅搜索“ecom_产品”表 如果用户以管理员身份登录,则搜索“ecom_产品”表和“ecom_用户”表,其中仅返回其他管理员详细信息(而不是客户信息) 大约两周前一切正常,但现在由于某种原因,当我以管理员身份登录时搜索多个关键字时,它会抛出一个错误。我已经全面检查了我的代

我创建了一个搜索栏,用户可以在其中输入他们的关键字,表单php代码将输入分解成一个单词数组。然后,我使用foreach循环遍历单词列表,并在数据库中的两个表中搜索匹配短语

主要功能如下:

  • 支持多字输入
  • 如果用户不是管理员,则仅搜索“ecom_产品”表
  • 如果用户以管理员身份登录,则搜索“ecom_产品”表和“ecom_用户”表,其中仅返回其他管理员详细信息(而不是客户信息)
大约两周前一切正常,但现在由于某种原因,当我以管理员身份登录时搜索多个关键字时,它会抛出一个错误。我已经全面检查了我的代码,并尝试对其进行更改,但仍然不起作用。下面是我看到的mysql_错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行使用near'或类似fname的'%string%'或类似lname的'%string%'或类似电子邮件的'%string%'或ma'的正确语法

下面是我的代码:

if(empty($_POST)=== false){
        require ('core/dbconnection.php');
        $output = '';
        $error = '';
        $input = mysql_real_escape_string($_POST['search_input']);
        $i=0;
        if($input){
            $keyword = explode(" ", $input);
            if($admin == 1){
                //If a user is logged in and the user is an Admin.
                $search_items = "SELECT * FROM ecom_products WHERE ";
                $search_users = "SELECT * FROM ecom_users WHERE ";
                foreach($keyword as $k){
                    $k = mysql_real_escape_string($k);
                    $i++;
                    if($i == 1){
                        $search_items .= "name LIKE '%$k%' OR description LIKE '%$k%'";
                        $search_users .= "is_admin='1' AND (fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'";
                    }else{
                        $search_items .= " OR name LIKE '%$k%' OR description LIKE '%$k%'";
                        $search_users .= " OR fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'";
                    }
                    $search_users .= ") ORDER BY lname DESC";
                }
另外,我正在将我所有的“msql”扩展更新为“mysqli”,事实上我尝试了mysqli,它甚至没有运行查询,所以我想在修改mysql扩展之前解决这个问题。非常感谢您的帮助

您需要搬家

$search_users .= ") ORDER BY lname DESC";
foreach($k)循环之外。现在它在每个循环的末尾添加,所以您的查询如下所示

SELECT * FROM ecom_users WHERE 
  is_admin='1' AND (fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'
  ) ORDER BY lname DESC
  OR fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'
  ) ORDER BY lname DESC
应该是

foreach($keyword as $k){
   $k = mysql_real_escape_string($k);
   $i++;
   if($i == 1){
      $search_items .= "name LIKE '%$k%' OR description LIKE '%$k%'";
      $search_users .= "is_admin='1' AND (fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'";
   }else{
      $search_items .= " OR name LIKE '%$k%' OR description LIKE '%$k%'";
      $search_users .= " OR fname LIKE '%$k%' OR lname LIKE '%$k%' OR email LIKE '%$k%' OR main_tel LIKE '%$k%'";
   }
   // REMOVE FROM HERE
}
// PLACE HERE
$search_users .= ") ORDER BY lname DESC";

逻辑构建完成后,
$search\u items
$search\u users
看起来像什么?是的!!它起作用了,真不敢相信是那样愚蠢的事情。谢谢:)