如何从数据库获取当前登录用户的交易日志?原代码返回全部数据
解决仅显示当前登录用户交易日志的问题
你的代码返回所有用户记录的核心原因是:SQL查询没有添加当前登录用户的筛选条件,直接拉取了表中全部数据。以下是具体修复方案:
核心修复步骤
- 确认已通过会话(Session)保存当前登录用户的唯一标识(比如
user_id、username,需匹配你的数据库表设计) - 在SQL中添加
WHERE子句,筛选仅属于该用户的记录 - 使用预处理语句执行查询,避免SQL注入风险
修改后的完整代码
<?php // 开启会话(如果代码开头未添加) session_start(); // 校验用户是否已登录 if (!isset($_SESSION['user_id'])) { echo "<tr><td colspan='4'>请先登录查看交易记录</td></tr>"; exit; } // 构建带占位符的安全查询语句 $sql = "SELECT amount, status, transactionid, date FROM admin_dept_table WHERE user_id = ?"; $stmt = mysqli_prepare($conn, $sql); // 绑定参数:"i"表示整数类型,若为字符串则改为"s" mysqli_stmt_bind_param($stmt, "i", $_SESSION['user_id']); mysqli_stmt_execute($stmt); $query_run = mysqli_stmt_get_result($stmt); ?> <table class="display table" id="example"> <thead> <tr class="info"> <th>Amount(USD)</th> <th>Status</th> <th>Tnx ID</th> <th>Date</th> </tr> </thead> <tbody> <?php if(mysqli_num_rows($query_run) > 0) { while($row = mysqli_fetch_assoc($query_run)){ ?> <tr> <td><?php echo $row['amount']; ?></td> <td><?php echo $row['status']; ?></td> <td><?php echo $row['transactionid']; ?></td> <td><?php echo $row['date']; ?></td> </tr> <?php } }else{ echo "<tr><td colspan='4'>no record found</td></tr>"; } // 关闭预处理语句 mysqli_stmt_close($stmt); ?> </tbody> </table>
关键调整说明
- 替换
user_id为你数据库表中实际存储用户标识的字段名(比如username、email) - 若用户标识是字符串类型,将
mysqli_stmt_bind_param中的"i"改为"s" - 确保用户登录时已将标识存入会话,比如执行
$_SESSION['user_id'] = $logged_in_user_id;
内容的提问来源于stack exchange,提问作者Ayomi Bami
相关产品推荐
相关产品推荐

