PHP执行SQL查询仅显示第一条结果的问题求助
问题解决:仅显示SQL查询第一条结果的问题
核心问题分析
- 仅获取单条记录:你当前只调用了一次
mysqli_fetch_array($result, MYSQLI_ASSOC),这个函数每次调用仅从结果集中取出一行数据,因此只会显示第一条记录。必须通过循环遍历整个结果集才能展示所有数据。 - 未定义的
$rows变量:代码中的$rows未赋值,需要用mysqli_num_rows($result)获取查询返回的总记录数。 - SQL注入风险:直接将用户输入的
$trimvar拼进SQL语句是高危操作,恶意用户可通过构造输入篡改SQL逻辑,必须用预处理语句规避。
修改后的完整代码
// 使用预处理语句避免SQL注入 $stmt = mysqli_prepare($connection, "SELECT id FROM details WHERE publicposition LIKE ? OR familyorgname LIKE ? OR commercialorgind LIKE ? ORDER BY id"); // 为模糊查询添加通配符 $searchTerm = "%{$trimvar}%"; // 绑定参数,三个参数均为字符串类型(s) mysqli_stmt_bind_param($stmt, "sss", $searchTerm, $searchTerm, $searchTerm); // 执行预处理语句 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); if (!$result) { die('Could not run query'); } // 获取总记录数 $rows = mysqli_num_rows($result); echo "<h1>Your staff conflict search on <font color='#ff0000'>'$trimvar'<font color='#000'> returned <font color='#ff0000'>$rows<font color='#000'> results</h1>"; // 使用while循环遍历所有结果 echo "<table style='width: 20%; border: 0;'>"; while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { echo "<tr>"; echo "<th> Record ID : " . $row['id'] . "</th>"; echo "</tr>"; } echo "</table>"; // 关闭预处理语句和结果集 mysqli_stmt_close($stmt); mysqli_free_result($result);
关键修改说明
- 预处理语句:替代直接拼接SQL的方式,通过绑定参数彻底避免SQL注入风险。
- 循环遍历结果:用
while循环持续调用mysqli_fetch_array,直到结果集为空,确保所有记录都被展示。 - 变量初始化:通过
mysqli_num_rows($result)赋值$rows,正确显示总结果数。 - 语法修正:修复了table标签中
style属性的引号嵌套错误,移除了表格内无效的<br/>标签,保证HTML结构合法。
内容的提问来源于stack exchange,提问作者MattPH
相关产品推荐
相关产品推荐

