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

PHP mysqli函数参数错误排查及注册代码修复咨询

修复mysqli函数参数错误及代码优化

我来帮你逐个拆解并修复这些错误,先看每个警告的核心根源:

错误原因分析

  • 警告1/3:mysqli_query()参数不足:mysqli_query()的正确调用格式是mysqli_query(数据库连接对象, SQL语句),你的代码里只传了SQL语句,漏掉了第一个必须的数据库连接参数。
  • 警告2:mysqli_num_rows()收到null:因为前面的mysqli_query()调用失败返回了null,所以传给mysqli_num_rows()的参数不是预期的mysqli_result类型,本质还是缺少连接对象导致的连锁问题。
  • 警告4:mysqli_error()参数缺失:mysqli_error()需要传入数据库连接对象来获取对应连接的错误信息,你没有传任何参数。

另外必须提醒:你的代码直接把用户输入拼到SQL语句里,存在严重的SQL注入风险,这是生产环境绝对不能出现的问题,我会在修复代码里一并解决。

修复后的完整代码

首先确保你已经建立了数据库连接,然后修改所有mysqli函数的调用逻辑:

// 先建立数据库连接(请替换成你的数据库实际信息)
$conn = mysqli_connect("localhost", "你的数据库用户名", "你的数据库密码", "你的数据库名");
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

if (isset($_POST['criar'])) {
    $nome = $_POST['nome'];
    $apelido = $_POST['apelido'];
    $email = $_POST['email'];
    $pass = $_POST['pass'];
    $data = date("Y/m/d");

    // 检查邮箱是否已注册:用预处理语句避免SQL注入
    $check_stmt = mysqli_prepare($conn, "SELECT email FROM users WHERE email = ?");
    mysqli_stmt_bind_param($check_stmt, "s", $email);
    mysqli_stmt_execute($check_stmt);
    mysqli_stmt_store_result($check_stmt);
    $do_email_check = mysqli_stmt_num_rows($check_stmt);

    if ($do_email_check >= 1) {
        echo '<h3>该邮箱已注册,若为您的账号,请点击<a href="login.php">此处</a>登录!</h3>';
    } elseif ($nome == '' || strlen($nome) < 3) {
        echo '<h3>请正确填写您的姓名!</h3>';
    } elseif ($email == '' || strlen($email) < 10) {
        echo '<h3>请正确填写您的邮箱!</h3>';
    } elseif ($pass == '' || strlen($pass) < 8) {
        echo '<h3>请正确设置密码,密码至少需包含8个字符!</h3>';
    } else {
        // 插入用户数据:同样使用预处理语句
        $insert_stmt = mysqli_prepare($conn, "INSERT INTO users (`nome`,`apelido`,`email`,`password`,`data`) VALUES (?, ?, ?, ?, ?)");
        mysqli_stmt_bind_param($insert_stmt, "sssss", $nome, $apelido, $email, $pass, $data);
        
        if (mysqli_stmt_execute($insert_stmt)) {
            setcookie("login", $email);
            header("Location: ./");
            exit; // 跳转后必须退出,避免后续代码执行
        } else {
            echo "<h3>抱歉,注册过程中出现错误...错误信息:" . mysqli_error($conn) . "</h3>";
        }
    }
}

关键修复点说明

  1. 所有mysqli相关函数都传入了数据库连接对象$conn,解决了参数缺失的警告;
  2. 用预处理语句替代直接拼接SQL,彻底杜绝SQL注入风险;
  3. 跳转后添加exit语句,防止后续代码意外执行;
  4. 错误提示中加入了具体的错误信息,方便你调试排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:41