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); // 移到内部,确保只有连接存在时才关闭 } ?>
额外建议
- 添加数据库连接检查:在
mysqli_connect后判断连接是否成功,这样如果是数据库配置错误(比如账号密码不对),能直接看到错误信息,方便排查。 - 输出具体错误信息:在插入失败时,用
mysqli_error($con)输出具体的SQL错误,而不是只说“Something went wrong”,能帮你快速定位问题。 - 密码加密存储:不要直接明文存储用户密码,推荐使用
password_hash()加密后再存入数据库,验证时用password_verify()。
内容的提问来源于stack exchange,提问作者Caren Garcia
相关产品推荐
相关产品推荐

