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

PHP登录后如何从关联表中获取并显示用户名称

实现登录后输出关联用户信息的解决方案

现有表结构

user表

user_namepassid
admin1231
admini1232

profil表

idname
1ajramos
2carlo

原代码问题分析

原代码存在几个关键错误导致无法实现需求:

  • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:05:41