PHP mysqli搜索错误


PHP mysqli search error

我正试图使用搜索栏和mysqli从数据库返回结果。然而,我的代码不起作用,也没有完成。

这是我的代码:

<?php
include("../dbconnect.php");
if (!isset($_POST['search'])) {
    header ("Location:tornado.php");
}

$search_sql="SELECT * FROM `TABLE 74` WHERE `COL 4` LIKE '%$_POST[search]%' OR `COL 3` LIKE '%$_POST[search]%'";
$search_query=$mysqli->query($search_sql);
if(mysqli_num_rows($search_query)!=0) {
$search_rs=mysqli_fetch_assoc($search_query);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Results</title>
</head>
<body>
<p>Search Results</p>
<?php if(mysqli_num_rows($search_query) !=0) {
    do{ ?>
    <p><?php echo $search_rs['`COL 4`']; ?></p>
<?php   } while ($search_rs=mysqli_fetch_assoc($search_query));
} else {
    echo "No results found";
}
?>
</body>
</html>

我很困惑,因为早些时候会出现"未找到结果"。现在,即使我回到了第一次工作的代码,也什么都没发生。我有什么东西不见了吗?如果可能的话,请解释一下我做错了什么。

您似乎忘记了将$包含在的mysqli

$search_query= mysqli->query($search_sql);
              ^

$mysqli是您的数据库连接。

应该读作

$search_query=$mysqli->query($search_sql);

在检查了查询中的错误后,会发出信号。

or die('There was an error running the query [' . $mysqli->error . ']');

编辑:(已测试)

这对我有效:

<?php
$DB_HOST = "xxx";
$DB_NAME = "xxx";
$DB_USER = "xxx";
$DB_PASS = "xxx";

$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($mysqli->connect_errno > 0) {
  die('Connection failed [' . $mysqli->connect_error . ']');
}

$search_sql="SELECT * FROM `TABLE 74` WHERE `COL 4` LIKE '%$_POST[search]%' OR `COL 3` LIKE '%$_POST[search]%'";
$search_query=$mysqli->query($search_sql);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Results</title>
</head>
<body>
<p>Search Results</p>
<?php 
if(mysqli_num_rows($search_query) > 0) {
    while ($rows=mysqli_fetch_assoc($search_query)){
    echo $rows['`COL 4`'];
    } 
}
else {
    echo "No results found.";
}

?>
</body>
</html>

这看起来不对:

$_POST[search]

试试这个:

"SELECT * FROM `TABLE 74` WHERE `COL 4` LIKE '%$_POST[''search'']%' OR `COL 3` LIKE '%$_POST[''search'']%'"

您可能还需要添加括号:

"SELECT * FROM `TABLE 74` WHERE `COL 4` LIKE '%{$_POST[''search'']}%' OR `COL 3` LIKE '%{$_POST[''search'']}%'"

确保COL 4实际上被调用而不是COL_4

最后,您可能应该查看准备好的语句,这些语句看起来很容易受到SQL注入攻击。

祝你好运!

您正在搜索与`COL 4`或`COL 3`匹配的行。因此,如果有行将COL 3中的搜索字符串与空COL 4相匹配,则会导致您正确看到的行为。还注意到,您的搜索结果显示在变量中使用了反勾号。您是否也可以尝试删除这些反勾号,所以请尝试执行以下操作:

  <?php if(mysqli_num_rows($search_query) !=0) {
    do{ ?>
    <p>
      <?php echo 'Col 4 - ' . $search_rs['COL 4']; ?>
      <?php echo 'Col 3 - ' . $search_rs['COL 3']; ?>
    </p>
  <?php 
    } while ($search_rs=mysqli_fetch_assoc($search_query));
  } else {
     echo "No results found";
  }