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

PHP连接XAMPP失败求助:Undefined variable: con错误排查

问题排查与修复方案

先看你遇到的错误:

Notice: Undefined variable: con in C:\xampp\htdocs\android\User-Registration.php on line 36
Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\android\User-Registration.php on line

错误1:变量$con未定义(非POST请求时触发)

你的mysqli_close($con)写在了if ($_SERVER['REQUEST_METHOD'] == 'POST')代码块的外面。当页面不是通过POST请求访问时,$con根本没有被初始化,自然会报“未定义变量”的错误,而且mysqli_close接收的参数是null,也会触发警告。

修复:把mysqli_close($con)移到POST条件的代码块内部,确保只有在连接初始化后才执行关闭操作。

错误2:INSERT SQL语句语法错误

你写的插入语句有语法错误:

$Sql_Query = "INSERT INTO register_account values(User_Email,User_Password,User_Full_Name) values ('$Email','$Password','$Full_Name')";

这里重复写了两个values,正确的语法应该是指定字段后用一个values,修正后:

INSERT INTO register_account (User_Email, User_Password, User_Full_Name) VALUES ('$Email','$Password','$Full_Name')

错误3:存在SQL注入风险

直接把用户输入的$Email、$Password拼接到SQL语句里,会导致严重的SQL注入漏洞,这是非常危险的。建议使用mysqli预处理语句来避免这个问题。

修正后的完整代码

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    include 'DatabaseConfig.php';
    $con = mysqli_connect($HostName, $HostUser, $HostPass, $DatabaseName);

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

    $Email = $_POST['User_Email'];
    $Password = $_POST['User_Password'];
    $Full_Name = $_POST['User_Full_Name'];

    // 使用预处理语句检查邮箱是否存在
    $CheckSQL = "SELECT * FROM register_account WHERE User_Email = ?";
    $stmt = mysqli_prepare($con, $CheckSQL);
    mysqli_stmt_bind_param($stmt, "s", $Email);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $check = mysqli_fetch_array($result);

    if (isset($check)) {
        echo 'Email Already Exist, Please Enter Another Email.';
    } else {
        // 使用预处理语句插入数据
        $Sql_Query = "INSERT INTO register_account (User_Email, User_Password, User_Full_Name) VALUES (?, ?, ?)";
        $stmt_insert = mysqli_prepare($con, $Sql_Query);
        mysqli_stmt_bind_param($stmt_insert, "sss", $Email, $Password, $Full_Name);
        
        if (mysqli_stmt_execute($stmt_insert)) {
            echo 'User Registration Successfully';
        } else {
            echo 'Something went wrong: ' . mysqli_error($con); // 输出具体错误信息便于排查
        }
        mysqli_stmt_close($stmt_insert);
    }

    mysqli_stmt_close($stmt);
    mysqli_close($con); // 移到内部,确保只有连接存在时才关闭
}
?>

额外建议

  1. 添加数据库连接检查:在mysqli_connect后判断连接是否成功,这样如果是数据库配置错误(比如账号密码不对),能直接看到错误信息,方便排查。
  2. 输出具体错误信息:在插入失败时,用mysqli_error($con)输出具体的SQL错误,而不是只说“Something went wrong”,能帮你快速定位问题。
  3. 密码加密存储:不要直接明文存储用户密码,推荐使用password_hash()加密后再存入数据库,验证时用password_verify()。

内容的提问来源于stack exchange,提问作者Caren Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:23:48