"mysqli_stmt object is not fully initialized" 错误信息

"mysqli_stmt object is not fully initialized" error message

我正在尝试使用 php 和 sql 制作注册表单,但我一直收到“mysqli_stmt 对象未完全初始化”的错误消息。
Registration.php 文件:

$sql = "INSERT INTO user_table ('user_name', 'user_email', 'user_password') VALUES (?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if (mysqli_stmt_prepare($stmt, $sql)){
    header("location: ../signup.php?error=sqlerror");
    exit();
} else {
    //hashing password
    $hashedPass = password_hash($password, PASSWORD_DEFAULT);
    //inserting hashed password.
    mysqli_stmt_bind_param($stmt, "sss", $username, $email, $hashedPass);
    mysqli_stmt_execute($stmt);
    
    header("location: ../signup.php?success=registered");
    exit();
}

我认为问题出在这部分(第 8 行)。

如果我们删除您的 if/else 检查和 运行 所有内容,在 mysqli_stmt_init 之后使用 mysqli_stmt_prepare 我们会得到我们期望的结果。

$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql);

所以您 if 的逻辑似乎需要一个! (意思是假的)。尝试对您的代码块进行此更改:

$sql = 'INSERT INTO user_table (user_name, user_email, user_password) VALUES (?, ?, ?)';
$stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt, $sql)) {
    header("location: ../signup.php?error=sqlerror");
    exit();
} else {
    //hashing password
    $hashedPass = password_hash($password, PASSWORD_DEFAULT);

    //inserting hashed password.
    mysqli_stmt_bind_param($stmt, 'sss', $username, $email, $hashedPass);
    mysqli_stmt_execute($stmt);

    header("location: ../signup.php?success=registered");
    exit();
}

以上代码在我的测试中有效。