我正在尝试切换我的注册页面以使用mysqli_stmt_prepare过程风格。
它没有准备就完美无缺,所以我非常确定数据库和其他所有内容都是正确连接的。
我已经按照PHP手册了解了如何执行此操作,但我继续从PHP获取空白页。
这是我的代码,如果有人能够发现我做错了什么我会非常感激。
我也不确定是否应将mysqli_real_escape放在前面。
$postuser = mysqli_real_escape_string($con, $_POST['username']);
$postpass = sha1($_POST['userpass']);
$postemail = mysqli_real_escape_string($con, $_POST['useremail']);
$stmt = mysqli_stmt_init($con);
if (mysqli_stmt_prepare($stmt,'INSERT INTO users (username, userpass, useremail, userdate)
VALUES( '" . ? . "',
'" . ? . "',
'" . ? . "',
NOW())'))
{
mysqli_stmt_bind_param($stmt, "sss", $postuser, $postpass, $postemail);
mysqli_stmt_execute($stmt);
mysqli_stmt_fetch($stmt);
}
if(!$stmt)
{
//something went wrong, display the error
echo '<ul class="ulstylecenter">
<li>Something went wrong while signing in. Please try again later.</li>
<li>If you are not redirected in 5 seconds please <a href="/home.php">click here</a>.</li>
</ul>';
header('Refresh: 5;url=/home.php');
}
答案 0 :(得分:1)
当您使用预准备语句时,您必须不转义值,并且您必须不将?
占位符放在SQL中的引号中
$postuser = $_POST['username'];
$postpass = sha1($_POST['userpass']);
$postemail = $_POST['useremail'];
$stmt = mysqli_stmt_init($con);
if (mysqli_stmt_prepare($stmt,'INSERT INTO users (username, userpass, useremail, userdate)
VALUES(?, ? ?, NOW()'))
无论是使用过程还是OO样式,都是一样的 - 两者之间的唯一区别是调用函数的语法。