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

PHP与MySQL出现未捕获错误问题排查及代码分析

PHP注册功能Uncaught Error排查与解决方法

嘿,我来帮你拆解这段代码里的问题——几个小细节凑到一起,就触发了这个未捕获错误:

1. MySQL扩展与mysqli扩展混用(最直接的报错原因)

你用mysqli_connect()建立了数据库连接,但后续却调用了mysql_real_escape_string()函数。这俩属于完全独立的PHP数据库扩展:mysql扩展早就被废弃(PHP7+甚至直接移除了),而且它和mysqli不共享连接资源,直接调用会立刻触发致命错误。

解决方法:把所有mysql_real_escape_string()替换成mysqli_real_escape_string(),并且必须传入数据库连接对象作为第一个参数:

$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password = mysqli_real_escape_string($db, $_POST['password']);
$password2 = mysqli_real_escape_string($db, $_POST['password2']);

2. 变量名拼写错误

你在INSERT语句里写的是'$usrname',但前面定义的变量明明是$username——少了一个字母'e'!这会触发“Undefined variable: usrname”的错误,直接中断SQL语句的执行。

解决方法:把SQL语句里的$usrname改成$username。

3. SQL语句语法不完整

你的INSERT语句末尾有...,而且括号没闭合,这属于明显的SQL语法错误,会导致数据库查询失败,进而抛出错误。

解决方法:补全并修正SQL语句:

$sql = "INSERT INTO users(username, email, password) VALUES('$username','$email','$password')";

4. 额外的安全性建议(非错误原因,但必须提)

虽然不是直接导致错误的问题,但md5()加密密码已经完全不安全了,建议改用PHP原生的password_hash()函数,它会自动生成符合安全标准的哈希值:

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

后续验证密码时,使用password_verify()函数即可完成匹配。


修正后的完整代码示例

<?php 
// 开启错误显示,方便调试(上线前记得关闭)
error_reporting(E_ALL);
ini_set('display_errors', 1);

session_start(); 
$db = mysqli_connect("localhost","root", "", "authentication"); 

// 检查连接是否成功
if (!$db) {
    die("数据库连接失败: " . mysqli_connect_error());
}

if (isset($_POST['regbtn'])) { 
    $username = mysqli_real_escape_string($db, $_POST['username']); 
    $email = mysqli_real_escape_string($db, $_POST['email']); 
    $password = $_POST['password']; 
    $password2 = $_POST['password2']; 

    if ($password == $password2) { 
        // 使用安全的密码哈希算法
        $passwordHash = password_hash($password, PASSWORD_DEFAULT); 
        // 修正变量名与SQL语法
        $sql = "INSERT INTO users(username, email, password) VALUES('$username','$email','$passwordHash')"; 
        
        if (mysqli_query($db, $sql)) {
            // 注册成功,跳转至登录页
            $_SESSION['success'] = "注册成功,请登录";
            header('Location: login.php');
            exit;
        } else {
            // 捕获SQL执行错误
            $_SESSION['error'] = "注册失败: " . mysqli_error($db);
        }
    } else {
        // 密码不匹配提示
        $_SESSION['error'] = "两次输入的密码不一致!";
    }
}
?>

内容的提问来源于stack exchange,提问作者A M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:40