You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用搜索查询从数据库展示数据时页面无输出的问题求助

问题排查与修复方案

嘿,我帮你找出了导致页面无内容输出的核心问题,还有几个需要优化的地方,一起来看看:

核心问题:数据库连接变量名不匹配

你在代码里用$conn = new mysqli(...)创建了数据库连接,但后续所有数据库操作(比如$mysqli->set_charset、$mysqli->query)都用了未定义的$mysqli变量!这会直接导致脚本报错中断,连else分支的内容都没法输出。

其他需要修正的细节

  1. 字符集设置位置与变量错误:字符集设置要在连接成功后执行,并且使用正确的连接变量。
  2. SQL注入风险:直接将用户输入拼进SQL语句是非常危险的操作,必须使用预处理语句来避免注入。
  3. 请求方式匹配:表单用的是POST方法,用$_POST代替$_REQUEST更精准,避免其他请求方式的干扰。

修正后的result.php代码

<?php
$servername = "localhost";
$username = "myusername";
$password = "mypassword";
$dbname = "mydb";

// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 设置数据库字符集
$conn->set_charset("utf8");

// 检查POST请求中的搜索参数
if (isset($_POST['q'])){ 
    $target = trim($_POST['q']); // 顺便去掉输入前后的空格
    
    // 使用预处理语句防止SQL注入
    $sql = "SELECT * FROM TABLE1 WHERE name LIKE ?";
    $stmt = $conn->prepare($sql);
    
    // 为LIKE语句添加通配符,绑定字符串类型参数
    $like_target = "%{$target}%";
    $stmt->bind_param("s", $like_target);
    
    // 执行查询
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows > 0) {
        // 遍历输出结果
        while ($row = $result->fetch_assoc()){
            echo $row["number"] . " " . $row["name"] . " " . $row["hp"] . "<br>";
        }
    } else {
        echo "0 results";
    }
    
    // 关闭预处理语句
    $stmt->close();
} else {
    echo "0 results";
}

// 关闭数据库连接
$conn->close();
?>

额外的表单小优化

你的表单代码里</input>是多余的,HTML中<input>是自闭合标签,修改后更规范:

<form action="result.php" method="POST">
    <h1>Search</h1>
    <input type="text" name="q">
    <br><br>
    <input type="submit" id="submit" value="Search">
</form>

内容的提问来源于stack exchange,提问作者Guitar2018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:45:11