简体   繁体   English

发送的mysqli_stmt_prepare()值为null

[英]mysqli_stmt_prepare() values sent are null

So I have this PHP code here: 所以我在这里有这个PHP代码:

mysqli_stmt_bind_param($stmt,"s",$username);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultCheck > 0)
{
   header("Location: ../signup.php?error=userTaken&u&mail=".$email);
   exit();
}
else
{
   $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?,?,?)";
   $stmt = mysqli_stmt_init($conn);
   if(!mysqli_stmt_prepare($stmt,$sql))
   {
       header("Location: ../signup.php?error=sqlerror");
       exit();
   }
   else
   {
       $hashedPwd = password_hash($password, PASSWORD_DEFAULT);
       mysqli_stmt_bind_param($stmt,"sss",$username,$email,$hashedPwd);
       $bp = $stmt->execute();
       if ( false===$bp )
       {
           die('Error with execute: ' . htmlspecialchars($stmt->error));
       }
       header("Location: ../signup.php?signup=success");
       exit();
    }
}

which gives the error: 这给出了错误:

Error with execute: Column 'uidUsers' cannot be null.

the prepared statement doesn't work no matter what I've tried. 无论我尝试了什么,准备好的语句都不起作用。 However, if I use 但是,如果我使用

$sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (' ',' ',' ')"
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}  

and just insert data without sanitizing it, it works. 并且只需插入数据而不对其进行消毒即可。

In if(!mysqli_stmt_prepare($stmt,$sql)) statement you are executing $sql query without bind params. if(!mysqli_stmt_prepare($stmt,$sql))语句中,您正在执行不带绑定参数的$sql查询。 ie you execute prepare 1st & then in else you use the bind 也就是说,您执行prepare 1st ,然后在其他情况下使用bind

Use below code : 使用以下代码:

$hashedPwd = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?,?,?)";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt,$sql);
mysqli_stmt_bind_param($stmt,"sss",$username,$email,$hashedPwd);

if (mysqli_stmt_execute($stmt))
{
   mysqli_stmt_store_result($stmt);
   if(mysqli_stmt_num_rows($stmt)>0) //check num rows ie user is available or not
   {
      header("Location: ../signup.php?signup=success"); //user available
      exit();
   }
   else
   {
      header("Location: ../signup.php?error=sqlerror"); //user is not available
      exit();
   }

}
else
{
   die('Error with execute: ' . htmlspecialchars($stmt->error));  //Query execution error
}

所以我的PHP版本太旧了,不支持该功能,因此我将其设置为PHP 7.3,现在代码可以正常工作了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM