[英]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.