Php 跨多个列搜索

Php 跨多个列搜索,php,mysql,search,Php,Mysql,Search,我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配项。例如,当用户输入要搜索的关键字时,我需要跨五个类别列进行搜索,并返回在其任一类别列中包含关键字的所有行的相应行名。代码如下: <?php mysql_connect($dbhost, $dbuser, $dbpass) or die("could not connect."); mysql_select_db($dbname) or die("could not find database.");

我正在尝试创建一个搜索功能,该功能将搜索多个列以查找基于关键字的匹配项。例如,当用户输入要搜索的关键字时,我需要跨五个类别列进行搜索,并返回在其任一类别列中包含关键字的所有行的相应行名。代码如下:

   <?php
    mysql_connect($dbhost, $dbuser, $dbpass) or die("could not connect.");
  mysql_select_db($dbname) or die("could not find database.");
  $result = "";
  //collect info from database
  if(isset($_POST['search'])) {
      $searchq = $_POST['search'];
      $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);
//SQL query
      $query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%$searchq%' OR category2 LIKE '%$searchq%' OR category3 LIKE '%$searchq%' OR category4 LIKE '%$searchq%' OR category5 LIKE '%$searchq%'") or die("No records found.");
      $count = mysql_num_rows($query);
      if($count == 0)
      {
          $output = "There's no search result";
      }
      else {
          while($array = mysql_fetch_assoc($query))
    {
    ?>
        <li><?php echo $array['name'];?></li>
    <?php
    }
  ?>
      }
  }
  </ul>


全文搜索可能是最佳选择。你确定你的
$searchq=preg_替换(“#[^0-9a-z]#i”,”,$searchq)线路工作正常?嗯,a)您是否尝试在预更换线路之后回显
$searchq
?b) 如果发生了错误,用户会怎么说?一般的方法和SQL对我来说似乎没问题(没有尝试过,也不知道你的数据…)。。。看看这个,看看标准化!
<?php
    mysql_connect($dbhost, $dbuser, $dbpass) or die("could not connect.");
  mysql_select_db($dbname) or die("could not find database.");
  $result = "";
  //collect info from database
  if(isset($_POST['search'])&& $_POST['search'] != "")) {
      $searchq = $_POST['search'];
      $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

//SQL query
      $query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%".$searchq."%' OR category2 LIKE '%".$searchq."%' OR category3 LIKE '%".$searchq."%' OR category4 LIKE '%".$searchq."%' OR category5 LIKE '%".$searchq."%'");
      $count = mysql_num_rows($query);
      if($count == 0)
      {
          $output = "There's no search result";
      }
 else {
          while($row= mysql_fetch_assoc($query))
            {

             echo $row['name'];

            }

      }
  }
  ?>