通过SQL进行PHP搜索

通过SQL进行PHP搜索,php,mysql,Php,Mysql,我试图把它组织成一个有自己的列的表,但每次我尝试,我都会发现一些非常混乱或完全错误的东西。如果我能从SQL中得到一些关于实现表的帮助,那就太好了。例如,请看此图像: 这是密码 $dbHost = 'localhost'; // localhost will be used in most cases $dbUser = 'root'; $dbPass = 'root'; $dbDatabase = 'root'; // the database you put the table into.

我试图把它组织成一个有自己的列的表,但每次我尝试,我都会发现一些非常混乱或完全错误的东西。如果我能从SQL中得到一些关于实现表的帮助,那就太好了。例如,请看此图像:

这是密码

$dbHost = 'localhost'; // localhost will be used in most cases
$dbUser = 'root'; 
$dbPass = 'root';
$dbDatabase = 'root'; // the database you put the table into.
$con = mysql_connect($dbHost, $dbUser, $dbPass) or trigger_error("Failed to connect to MySQL Server. Error: " . mysql_error());

mysql_select_db($dbDatabase) or trigger_error("Failed to connect to database {$dbDatabase}. Error: " . mysql_error());

$error = array();
$results = array();

if (isset($_GET['search'])) {
   $searchTerms = trim($_GET['search']);
   $searchTerms = strip_tags($searchTerms); // remove any html/javascript.

   if (strlen($searchTerms) < 2) {
      $error[] = "Search terms must be longer than 2 characters.";
   }else {
      $searchTermDB = mysql_real_escape_string($searchTerms); // prevent sql injection.
   }

   // If there are no errors, lets get the search going.
   if (count($error) < 1) {
      $searchSQL = "SELECT brandname, manufacturer, distributor, modelnumber, date, expirey FROM productlist WHERE ";

      // grab the search types.
      $types = array();
      $types[] = isset($_GET['Brand Name'])?"`brandname` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['Manufacturer'])?"`manufacturer` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['distributor'])?"`distributor` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['modelnumber'])?"`modelnumber` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['E'])?"`E` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['F'])?"`F` LIKE '%{$searchTermDB}%'":'';

      $types = array_filter($types, "removeEmpty"); // removes any item that was empty (not checked)

      if (count($types) < 1)
         $types[] = "`brandname` LIKE '%{$searchTermDB}%'"; // use the body as a default search if none are checked

          $andOr = isset($_GET['matchall'])?'AND':'OR';
      $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `brandname`"; // order by title.

      $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}");

      if (mysql_num_rows($searchResult) < 1) {
         $error[] = "The search term provided {$searchTerms} yielded no results.";
      }else {
         $results = array(); // the result array
         $i = 1;
         while ($row = mysql_fetch_assoc($searchResult)) {
            $results[] = "{$i}: <b>Brand Name:</b>  {$row['brandname']}<br /><b>Distributor:</b>  {$row['distributor']}<br /><b>Manufacturer:</b>  {$row['manufacturer']} <br /><b>Model Number:</b>  {$row['modelnumber']}<br /><b>Certifying Agency:</b>  {$row['E']} {$row['F']}<br /><br /><br />";
            $i++;
         }
$dbHost='localhost';//在大多数情况下将使用localhost
$dbUser='root';
$dbPass='root';
$dbDatabase='root';//将表放入的数据库。
$con=mysql_connect($dbHost、$dbUser、$dbPass)或触发器_错误(“未能连接到mysql服务器。错误:”.mysql_error());
mysql_选择_db($dbDatabase)或触发_错误(“连接到数据库{$dbDatabase}失败。错误:“.mysql_错误());
$error=array();
$results=array();
如果(isset($\u GET['search'])){
$searchTerms=trim($_GET['search']);
$searchTerms=strip_标记($searchTerms);//删除任何html/javascript。
if(strlen($searchTerms)<2){
$error[]=“搜索词必须超过2个字符。”;
}否则{
$searchTermDB=mysql\u real\u escape\u string($searchTerms);//防止sql注入。
}
//如果没有错误,让我们开始搜索。
如果(计数($error)<1){
$searchSQL=“从productlist WHERE中选择品牌名称、制造商、分销商、型号、日期、过期日期”;
//抓取搜索类型。
$types=array();
$types[]=isset($_GET['Brand Name'])?“`brandname`类似“%$searchTermDB}%”:”;
$types[]=isset($_GET['Manufacturer'])?“`Manufacturer`像“{$searchTermDB}%”:”;
$types[]=isset($_GET['distributor'])?“`distributor`类似于“{$searchTermDB}%”:”;
$types[]=isset($_GET['modelnumber'])?“`modelnumber`类似“{$searchTermDB}%”:”;
$types[]=isset($_GET['E'])?“`E`类似于“{$searchTermDB}%”:”;
$types[]=isset($\u GET['F'])?“`F`类似“{$searchTermDB}%”:”;
$types=array_filter($types,“removempty”);//删除任何为空(未选中)的项
if(计数($类型)<1)
$types[]=“`brandname`类似“%$searchTermDB}%””;//如果未选中任何内容,则将正文用作默认搜索
$andOr=isset($_GET['matchall'])?'和':'或';
$searchSQL.=内爆(“{$andOr}”,$types)。“按品牌名称排序”;//按标题排序。
$searchResult=mysql_query($searchSQL)或trigger_error(“有错误。
.”。mysql_error()。“
SQL是:{$searchSQL}”); if(mysql_num_rows($searchResult)<1){ $error[]=“提供的搜索词{$searchTerms}未产生任何结果。”; }否则{ $results=array();//结果数组 $i=1; while($row=mysql\u fetch\u assoc($searchResult)){ $results[]=“{$i}:品牌名称:{$row['brandname']}
经销商:{$row['Distributor']}
制造商:{$row['Manufacturer']}
型号:{$row['modelnumber']}
认证机构:{$row['E']}{$row['F']}

; $i++; }
你应该说得更具体些,我真的不明白你在问什么。但作为一个起点,仅仅看一下你的代码,你的上一个“else”语句中似乎缺少一个结尾的大括号“}”,这可能会产生问题。你说:“我试图将其组织到一个有自己列的表中,但每次我尝试时,我都会得到一些非常混乱或完全错误的东西”,但是“这”是什么,如果你不描述你所说的“完全错误的混乱”是什么意思,我们应该如何提供帮助“?这可能意味着什么…

错误在于在
$和或
变量处提供空格,请参阅。”

$andOr = isset($_GET['matchall'])?'AND':'OR'; // You cannot implode them without giving space
$searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `brandname`";
固定代码为:

$andOr = isset($_GET['matchall'])?' AND ':' OR '; // I give space to them
$searchSQL .= implode($andOr, $types) . " ORDER BY `brandname`"; // I call $andOr variable directly without `{}`

那么,还发现了错误吗?

它的显示方式如下:1:品牌名称:Bio®分销商:Pinn制造商:Bio Inc.型号:Bio \?M 0.5-N我希望它在一个表格中,每个表格在其自己的列中都显示制造商分销商型号,并将每个搜索显示在一个干净的表格中,而不是当前的表格中布局。这是否更有意义。认证机构:类型3havent有任何错误,我仍然需要弄清楚如何使它在一个表中显示在自己的列中,如sql数据库,如图片描述中所示。自PHP版本5.5.0以来,MySQL_connect被弃用。请使用mysqli!