我在写一个数据库交互搜索功能的时候,发现
// 检查请求方法是否为 GET
if ($_SERVER["REQUEST_METHOD"] === "GET") {
// 获取用户输入并进行转义处理
$query = isset($_GET["query"]) ? $mysqli->real_escape_string(trim($_GET["query"])) : '';
echo $query;
// 构建 SQL 查询
if (!empty($query)) {
$sql = "SELECT * FROM books WHERE bname LIKE '%$query%' OR author LIKE '%$query%'";
echo $sql ;
// 执行查询
$results = $mysqli->query($sql);
echo $sql ;
// 检查查询结果
if ($results) {
echo "<h2>搜索结果:</h2>";
if ($results->num_rows > 0) {
// 输出结果
while ($row = $results->fetch_assoc()) {
echo "书名: " . htmlspecialchars($row['bname']) . " | 作者: " . htmlspecialchars($row['author']) . "<br>";
}
} else {
echo "没有找到相关结果。";
}
// 释放结果集
$results->free();
} else {
echo "查询错误: " . $mysqli->error;
}
} else {
echo "请输入搜索内容。";
}
}
这个老是打印出全部的表,而不是搜索的内容。
我就很奇怪,查了一圈发现是result那里出了问题,是因为存储在result内的查找结果是数组而不是数据,不可以就这样输出。
就删了原来输出搜索结果的循环,取而代之地写一段:
$results = $mysqli->query($sql);
echo "<table border='1'><tr><td>bname</td><td>author</td></tr>";
while($row=mysqli_fetch_array($results)){
echo "<tr>";
echo "<td>{$row['bname']}</td>";
echo "<td>{$row['author']}</td>";
echo "</tr>";
}
echo "</table>";
这个运行后就会输出正确的查找内容,而且很工整,不会出现明明搜索的是一行却打印了整张表的情况。
多用一个fetch_array命令把里面的内容提溜出来再循环输出就可以了,在网上找了半天发现没有人讲这个,记录一下,希望能有所帮助。
顺便:可能会搞不清我删了啥,这是修改后的部分代码(不包括与数据库连接部分)
// 检查请求方法是否为 GET
if ($_SERVER["REQUEST_METHOD"] === "GET") {
// 获取用户输入并进行转义处理
$query = $_GET["query"] ;
// 构建 SQL 查询
if ($query) {
$sql = "SELECT * FROM books WHERE bname LIKE '%$query%' OR author LIKE '%$query%'";
// 执行查询
$results = $mysqli->query($sql);
echo "<table border='1'><tr><td>bname</td><td>author</td></tr>";
while($row=mysqli_fetch_array($results)){
echo "<tr>";
echo "<td>{$row['bname']}</td>";
echo "<td>{$row['author']}</td>";
echo "</tr>";
}
echo "</table>";
}