PHP登录后如何从关联表中获取并显示用户名称
实现登录后输出关联用户信息的解决方案
现有表结构
user表
| user_name | pass | id |
|---|---|---|
| admin | 123 | 1 |
| admini | 123 | 2 |
profil表
| id | name |
|---|---|
| 1 | ajramos |
| 2 | carlo |
原代码问题分析
原代码存在几个关键错误导致无法实现需求:
- SQL表名错误:实际表名为
user,代码中误写为users - 字段名错误:
user表中密码字段是pass,代码中用了不存在的password - 未处理查询结果:直接尝试输出
$_SESSION['name'],但未从查询结果中获取数据并存入Session - 存在SQL注入风险:直接将参数硬编码进SQL语句
修正后的完整实现代码
<?php // 启动Session,否则无法使用$_SESSION session_start(); // 假设$conn是已成功建立的数据库连接对象 // 修正SQL:使用正确表名、字段名,采用参数化查询避免注入 $sql = "SELECT user.user_name, user.pass, profil.name FROM user LEFT JOIN profil ON user.id = profil.id WHERE user.user_name = ? AND user.pass = ?"; // 预处理SQL语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数("ss"表示两个字符串类型参数) mysqli_stmt_bind_param($stmt, "ss", $username, $password); // 模拟登录传入的用户名和密码(实际项目中可从表单POST获取) $username = 'admin'; $password = '123'; // 执行查询 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); // 读取查询到的用户数据 if ($row = mysqli_fetch_assoc($result)) { // 将用户信息存入Session(供后续页面使用) $_SESSION['user_name'] = $row['user_name']; $_SESSION['pass'] = $row['pass']; $_SESSION['name'] = $row['name']; // 按需求格式输出内容 echo "{$row['user_name']} {$row['pass']} {$row['name']}"; } else { echo "登录失败,用户名或密码错误"; } // 清理资源 mysqli_stmt_close($stmt); mysqli_close($conn); ?>
关键说明
- Session初始化:使用
$_SESSION前必须调用session_start(),否则无法读写Session数据 - SQL正确性:修正表名和字段名,确保两张表能通过
id正确关联查询 - 安全优化:采用预处理语句绑定参数,彻底避免SQL注入风险
- 结果处理:通过
mysqli_fetch_assoc()获取唯一匹配的用户数据,按需求拼接输出
内容的提问来源于stack exchange,提问作者James Ramos
相关产品推荐
相关产品推荐

