如何根据当前登录用户名筛选关联Users表的Mandates数据表数据
解决方法
要只返回当前登录用户相关的数据,你需要在SQL查询里添加用户筛选条件,同时必须用预处理语句避免SQL注入,具体操作如下:
1. 先获取当前登录用户名
一般登录后用户的用户名会存在Session中,先确保开启Session:
session_start(); // 假设当前登录用户的用户名存在 $_SESSION['username'] 里 $current_user = $_SESSION['username'];
2. 修改查询语句(安全写法)
替换你原来的查询代码,改成带筛选条件的预处理查询:
<?php session_start(); $current_user = $_SESSION['username']; // 使用JOIN语法更规范,同时添加用户筛选条件,用预处理防注入 $query = "SELECT m.*, u.name FROM mandates m JOIN users u ON m.provider = u.name WHERE u.name = ?"; $stmt = mysqli_prepare($con, $query); // 绑定参数,"s"表示参数是字符串类型 mysqli_stmt_bind_param($stmt, "s", $current_user); mysqli_stmt_execute($stmt); $query_run = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($query_run) > 0) { foreach($query_run as $mandates) { // 这里写你处理每条数据的逻辑 } }
重要提示
- 用
JOIN替代旧的逗号关联表的写法,这是SQL的标准写法,可读性更强。 - 必须用预处理语句绑定参数,不能直接把变量拼进SQL里,否则会有SQL注入风险。
- 如果你的当前登录用户名存在其他地方(比如Cookie或者自定义变量),把
$current_user替换成对应的变量就行。
内容的提问来源于stack exchange,提问作者Nine Delos Reyes
相关产品推荐
相关产品推荐

