php - 准备好的语句在不应该的时候失败

标签 php mysql mysqli prepared-statement

我的网站上有一个注册表单,只要有新用户注册,就会运行以下代码:

$sql = "SELECT * FROM users WHERE uidUsers=?;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt)) {
    header("Location: ../signup.php?error=sqlerror");
    exit();
}
else {
 mysqli_stmt_bind_param($stmt, "s", $username);
 mysqli_stmt_execute($stmt);
 $resultCheck = mysqli_stmt_num_rows($stmt);
if ($resultCheck > 0) {
    header("Location: ../signup.php?error=usertaken");
    exit();
}
else {
    $hashedPwd = password_hash(PASSWORD_DEFAULT, $password);
    $sql = "INSERT INTO users (`uidUsers`, `pwdUsers`, `phraseUsers`) VALUES(?, 
?, ?)";
    $stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt)) {
    header("Location: ../signup.php?error=sqlerror");
    exit();
}
else {
    mysqli_stmt_bind_param($stmt, "sss", $username, $hashedPwd, 
    $securityphrase);
    mysqli_stmt_execute($stmt);
    header("Location: ../login.php?signup=success");
    exit();
}

!mysqli_stmt_prepare 错误处理程序在不应该被赋予数据库环境以及正确的 INSERT 语句时被触发。因此我不明白为什么它会被触发,我想问为什么?

Stack Overflow 上也有类似的问题

最佳答案

谢谢大家的帮助,问题出在password_hash的顺序,应该是这样的password_hash($var, PASSWORD_DEFAULT);。我犯的第二个错误是在 mysqli_stmt_prepare 中没有包含我的 $sql 语句,它应该是这样的 !mysqli_stmt_prepare($stmt, $sql).

关于php - 准备好的语句在不应该的时候失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294637/

相关文章:

php - Sql 2 表 Q?

php - 合并两个从两个不同表返回值的 SQL SELECT 语句

javascript - 使用 php 设置延迟通知

mysql - Comments Controller 中的 Create 方法不起作用。 rails

php - 尝试准备语句时无法传递参数

php - 为什么MYSQL Server "go away"在PHP 5.4.11下,在5.3.17下却不是?

php - MySQL 中的 Where 子句使用 VARBINARY 列

php - "within 7 days"间隔的结果不显示今天的结果。

葡萄牙语的 MySQL 排序规则

mysql - 印度铁路数据库在车站之间连接火车时出错