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

PHP+AJAX按ID查询记录异常:点击不同按钮显示相同数据

问题分析与解决方案

核心问题排查方向

点击所有View按钮都显示同一条记录,大概率是前端获取的ID不准确或后端SQL查询存在隐患导致的,以下是具体修复步骤:

1. 修复前端ID获取的空白问题

当前通过text()获取ID时,可能因为HTML中的换行、空格等空白字符导致ID值带冗余内容,传递给后端后查询出错。

修改AJAX代码中获取ID的部分,添加trim()去除空白:

<script>
  $(document).ready(function () {
    $('.view_btn').click(function (e) {
      e.preventDefault();

      // 添加trim()去除空白字符
      var p_id = $(this).closest('tr').find('.patient_id').text().trim();
      console.log(p_id); // 打开此日志,确认点击不同按钮时输出的ID是否正确

      $.ajax({
        type: "POST",
        url: "Modals/viewHistory/view_medical_itr.php",
        data: {
              'checking_viewbtn': true,
              'patient_id': p_id,
        },
        success: function (response){
          $('.patient_viewing').html(response);
          $('#medical_itr').modal('show');
        }
      });
    });
  });
</script>

2. 修复后端SQL注入风险与类型问题

原代码直接拼接SQL存在注入风险,且未对ID进行类型校验,可能导致查询异常。改用预处理语句,并强制转换ID为整数:

include_once("connections/connections.php");

$con = connection();

if(isset($_POST['checking_viewbtn'])){
    // 强制转换为整数,确保ID为合法数字
    $p_id = (int)$_POST['patient_id'];

    // 使用预处理语句避免SQL注入,同时确保查询精准
    $sql = "SELECT * FROM medical_itr WHERE id = ?";
    $stmt = $con->prepare($sql);
    $stmt->bind_param("i", $p_id); // "i"表示参数为整数类型
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
}

3. 修复PHP循环初始化问题

原do-while循环会先执行一次输出,此时$row可能未被正确初始化(依赖之前的变量值),导致数据异常,建议改为while循环:

<tbody>
<?php while($row = $medical_itr->fetch_assoc()){ ?>
    <tr>
        <td class="patient_id"><?php echo $row['id']; ?></td>
        <td><?php echo $row['family_number']; ?></td>
        <td><?php echo $row['Age'];?></td>
        <td><?php echo $row['chief_complaints']; ?></td>
        <td><?php echo $row['diagnosis']; ?></td>
        <td><?php echo $row['medication_treatment']; ?></td>
        <td><?php echo $row['added_at']; ?></td>
        <td>
            <div class="col-2">
                <a href="#" class="btn btn-primary view_btn mb-2">view</a>
            </div>
        </td> 
    </tr>
<?php } ?>
</tbody>

验证步骤

  1. 打开浏览器控制台,点击不同行的View按钮,查看console.log(p_id)输出的ID是否与表格中显示的一致;
  2. 执行上述修复后,测试不同行的View按钮是否能正确显示对应记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:25:17