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

Android项目PHP连MySQL注册报错:mysqli_close()参数类型不匹配

解决mysqli_close()参数为null的注册模块错误

先直接说核心问题:你遇到的Warning: mysqli_close() expects parameter 1 to be mysqli, null given错误,本质是数据库连接失败导致$con变量为null,再加上代码里还有几个隐藏的问题,我给你一步步梳理修复方案:

1. 先补上数据库连接的有效性检查

你现在直接调用mysqli_connect但没判断连接是否成功——一旦连接失败(比如配置文件里的用户名/密码错、数据库不存在),$con就会变成null,后续所有mysqli操作都会出问题,包括你代码末尾的mysqli_close($con)。

修改连接部分:

include 'DatabaseConfig.php';
$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

// 新增连接检查,失败直接终止并输出错误信息
if (!$con) {
    die("数据库连接失败: " . mysqli_connect_error());
}

2. 修复INSERT语句的字段与值不匹配问题

你的INSERT语句里,字段列表是(id,username,email,password_cnic,phone)(共5个字段),但值列表却写了6个值:('$id','$U_name','$email','$password','$cnic','$phone'),这会直接导致插入失败。看字段名password_cnic应该是笔误,应该拆分password和cnic两个字段,修正后的语句:

$Sql_Query = "INSERT INTO Users (id,username,email,password,cnic,phone) values ('$id','$U_name','$email','$password','$cnic','$phone')";

3. 紧急修复SQL注入漏洞(非常重要)

你现在直接把POST参数拼进SQL语句,这是严重的安全漏洞,别等上线再后悔,赶紧换成预处理语句:

// 检查邮箱是否存在的预处理版本
$CheckSQL = "SELECT * FROM Users WHERE 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($check){
    echo 'Email Already Exist';
} else {
    // 插入数据的预处理版本
    $Sql_Query = "INSERT INTO Users (id,username,email,password,cnic,phone) values (?,?,?,?,?,?)";
    $stmt = mysqli_prepare($con, $Sql_Query);
    mysqli_stmt_bind_param($stmt, "ssssss", $id_name, $U_name, $email, $password, $cnic, $phone);
    if(mysqli_stmt_execute($stmt)){
        echo 'Registration Successfully';
    } else {
        // 新增错误提示,方便调试
        echo '注册失败: ' . mysqli_error($con);
    }
}

4. 确保mysqli_close调用安全

如果你的代码末尾有mysqli_close($con),一定要先判断$con是否有效,避免再次触发警告:

if($con){
    mysqli_close($con);
}

完整修复后的代码示例

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

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

    $id_name = $_POST['id'];
    $U_name = $_POST['username'];
    $password = $_POST['password'];
    $cnic = $_POST['cnic'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    // 预处理查询检查邮箱是否存在
    $CheckSQL = "SELECT * FROM Users WHERE 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($check){
        echo 'Email Already Exist';
    } else {
        // 预处理插入数据
        $Sql_Query = "INSERT INTO Users (id,username,email,password,cnic,phone) values (?,?,?,?,?,?)";
        $stmt = mysqli_prepare($con, $Sql_Query);
        mysqli_stmt_bind_param($stmt, "ssssss", $id_name, $U_name, $email, $password, $cnic, $phone);
        
        if(mysqli_stmt_execute($stmt)){
            echo 'Registration Successfully';
        } else {
            echo '注册失败: ' . mysqli_error($con);
        }
    }

    // 安全关闭连接
    if($con){
        mysqli_close($con);
    }
}
?>

内容的提问来源于stack exchange,提问作者Muhammad Sajid Lakha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:38