使用搜索查询从数据库展示数据时页面无输出的问题求助
问题排查与修复方案
嘿,我帮你找出了导致页面无内容输出的核心问题,还有几个需要优化的地方,一起来看看:
核心问题:数据库连接变量名不匹配
你在代码里用$conn = new mysqli(...)创建了数据库连接,但后续所有数据库操作(比如$mysqli->set_charset、$mysqli->query)都用了未定义的$mysqli变量!这会直接导致脚本报错中断,连else分支的内容都没法输出。
其他需要修正的细节
- 字符集设置位置与变量错误:字符集设置要在连接成功后执行,并且使用正确的连接变量。
- SQL注入风险:直接将用户输入拼进SQL语句是非常危险的操作,必须使用预处理语句来避免注入。
- 请求方式匹配:表单用的是
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
相关产品推荐
相关产品推荐

