PHP搜索打印出整张表怎么办

我在写一个数据库交互搜索功能的时候,发现


// 检查请求方法是否为 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>";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值