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

PHP登录功能故障排查:注册正常但登录失败,数据库连接正常

登录功能失败的问题排查与修复

核心问题分析

你的登录代码存在两个关键错误:

1. 预处理语句结果获取方式错误

使用mysqli_prepare创建的语句对象,不能直接通过$query->fetch()获取关联数组。需要先调用get_result()方法得到结果集对象,再从中取出数据行。

2. Session变量拼写错误

代码中$SESSION["user"] = $row;少了下划线,正确写法是$_SESSION["user"] = $row;,这会导致登录后Session无法正确保存用户信息。

修改后的Login.php代码

<?php
require_once "config.php";
require_once "session.php";
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {
    $email = trim($_POST['email']);
    $password = trim($_POST['password']) ;
    if (empty($email)) {
        $error .= '<p class="error">Please enter email.</p>';
    }
    if (empty($password)) {
        $error .= '<p class="error">Please enter password.</p>';
    }
    if (empty($error)){
        if($query = $db->prepare("SELECT * FROM users WHERE email = ?")) {
            $query->bind_param('s',$email);
            $query->execute();
            // 获取结果集对象
            $result = $query->get_result();
            $row = $result->fetch_assoc();
            if ($row) {
                if (password_verify($password, $row['password'])) {
                    $_SESSION["userid"] = $row['id'];
                    $_SESSION["user"] = $row;
                    header("location: index2.php");
                    exit;
                }else{
                    $error.= '<p class="error">The password is not valid.</p>';
                }
            }else{
                $error.= '<p class="error">Wrong mail.</p>';
            }
        }
        $query->close();
    }
    mysqli_close($db);
}
?>

额外检查项

  • 确认数据库中users表的password字段长度至少为VARCHAR(255):bcrypt生成的哈希字符串长度为60,若字段过短会导致哈希值被截断,无法通过password_verify验证。
  • 检查session.php是否正确开启了Session(是否包含session_start();语句)。

内容的提问来源于stack exchange,提问作者Bernhard Alber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:46:01