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

通过邮箱查询Transactions表仅返回一行数据的技术求助

问题排查与解决

问题原因

  • 前端循环逻辑错误:foreach循环的闭合花括号写在了HTML输出代码之前,循环结束后才输出表格行,此时$row仅保留最后一条数据的引用,因此只会显示一行结果。
  • SQL注入风险:直接将$email拼接进SQL语句,未使用PDO参数绑定,存在安全漏洞。

修复后的代码

1. 修复查询函数(解决注入问题)

public function fetchAirtimeTrans() {
    $email = $_SESSION['logged'];
    // 使用参数绑定避免SQL注入
    $query = $this->db->prepare("SELECT * FROM Transactions WHERE `email` = :email ORDER BY id ASC ");
    $query->bindParam(':email', $email, PDO::PARAM_STR);
    $query->execute();
    $query->setFetchMode(PDO::FETCH_ASSOC);
    $result = $query->fetchAll();
    return $result;
}

2. 修复前端展示代码(解决仅显示一行问题)

$datas = new Transactions();
$result = $datas->fetchAirtimeTrans();

if($result) {
    foreach( $result as $row) {
        // 将表格行输出逻辑移至循环内部,每条数据对应一行
?>
<tr>
    <td><?= $row['trans_id'] ?></td>
</tr>
<?php
    }
}

修复说明

  • 前端代码将表格行的输出逻辑移入foreach循环内部,循环遍历每条交易数据时都会生成对应的表格行,从而展示所有结果。
  • 查询函数改用PDO参数绑定方式传递email参数,彻底避免SQL注入风险,同时保证查询逻辑的稳定性。

内容的提问来源于stack exchange,提问作者Syntax Byte Solutions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:31:59