我正试图使用搜索栏和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";
}