PHP执行SQL查询无法返回ID,登录时会话UserID保存失败如何解决
故障原因
你的查询语句只检索了admin字段,没有将id字段加入查询列表,因此执行fetch()后得到的结果数组中不存在id索引,自然无法读取到对应值;而admin字段是你明确指定查询的,所以可以正常取值。
修复方案
- 修改Login函数内的SQL查询语句,新增id字段的查询:
将原有SQL行
$sql = "SELECT admin FROM admin WHERE admin=:admin AND password=:password LIMIT 1";
替换为:
$sql = "SELECT id, admin FROM admin WHERE admin=:admin AND password=:password LIMIT 1";
- 可选优化建议:
- 不要明文存储用户密码,注册时使用
password_hash()加密密码存储,登录时调用password_verify()校验密码正确性,避免数据泄露后密码直接暴露 - 调用
fetch()时明确指定返回格式为关联数组:$stmt->fetch(PDO::FETCH_ASSOC),避免因PDO默认配置返回索引+关联的混合数组,导致取值异常 - 避免使用全局变量传递数据库连接,改用依赖注入的方式传入数据库实例,降低代码耦合度
- 不要明文存储用户密码,注册时使用
内容的提问来源于stack exchange,提问作者Oliver Tucker
相关产品推荐
相关产品推荐

