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

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);

关键修改说明

  1. 预处理语句:替代直接拼接SQL的方式,通过绑定参数彻底避免SQL注入风险。
  2. 循环遍历结果:用while循环持续调用mysqli_fetch_array,直到结果集为空,确保所有记录都被展示。
  3. 变量初始化:通过mysqli_num_rows($result)赋值$rows,正确显示总结果数。
  4. 语法修正:修复了table标签中style属性的引号嵌套错误,移除了表格内无效的<br/>标签,保证HTML结构合法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:10:29