"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();
}
以上代码在我的测试中有效。
我正在尝试使用 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();
}
以上代码在我的测试中有效。