PHP使用procederal样式准备插入

时间:2014-02-05 17:15:33

标签: php mysqli

我正在尝试切换我的注册页面以使用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');
    }

1 个答案:

答案 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样式,都是一样的 - 两者之间的唯一区别是调用函数的语法。