MySQLi $ userid返回0

时间:2014-05-13 04:53:06

标签: mysqli

    $username = $_POST['username'];
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $confirmpassword = $_POST['confirmpassword'];
    $time = time();

if($password != $confirmpassword) {
    echo '<meta http-equiv="refresh" content="0; url=?error=1" />';
    die();
} else {
        if($username != '') {
            echo '<meta http-equiv="refresh" content="0; url=?error=2" />';
            die();
        } else {


    $checkemail = $db->prepare("SELECT * FROM `member` WHERE `email` = ?");
    $checkemail->bind_param('s', $email);
    $checkemail->execute();
    $checkemail->store_result(); 
    $emailrows = $checkemail->num_rows;
    $checkemail->free_result();

    if($emailrows > '0') {
    echo '<meta http-equiv="refresh" content="0; url=?error=3" />';
    die();

    } else {

    $checkdisplay = $db->prepare("SELECT * FROM `member` WHERE `display` = ?");
    $checkdisplay->bind_param('s', $name);
    $checkdisplay->execute();
    $checkdisplay->store_result(); 
    $displayrows = $checkdisplay->num_rows;
    $checkdisplay->free_result();

    if($displayrows > '0') {
    echo '<meta http-equiv="refresh" content="0; url=?error=4" />';
    die();

    } else {

    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
        echo '<meta http-equiv="refresh" content="0; url=?error=5" />';
        die();
    } else {

    $createaccount = $db->prepare("INSERT INTO `member` (`display`, `email`, `salt`, `password`, `rank`, `joined`, `ip`) VALUES (?, ?, ?, ?, ?, ?, ?)");
    $ip = $_SERVER['REMOTE_ADDR'];
    $salt = sha1(rand(10000000, 99999999));
    $encrypt = sha1($password . $salt);
    $rank = '1';
    $createaccount->bind_param('ssssiis', $name, $email, $salt, $encrypt, $rank, $time, $ip);
    $createaccount->execute();

    $getid = $db->prepare("SELECT `id` FROM `member` WHERE `display` = ?");
    $getid->bind_param('s', $name);
    $getid->execute();
    $getid->bind_result($userid);
    $getid->free_result();

    if(!$userid) {
        echo '<meta http-equiv="refresh" content="0; url=?error=6" />';
        die();
    } else {
            $encryptip = sha1($ip);


                session_regenerate_id();

                $_SESSION['sesid'] = $userid;
                $_SESSION['sesip'] = $encryptip;

                session_write_close();
ob_get_clean();
echo 'success';
echo $userid;
echo $encryptip;
    }

    }
    }

    }

}
}

我只是在学习MySQLi的绳索,所以主要是从一个教程中得到这个(虽然不得不从不同的站点扔掉部分 - 因此错误)。

有人能够解释为什么$ userid会返回0而不是1它应该是什么?我希望这是一个简单的错误。

查询是正确的,我多次查看过,是的,$name已设置。

1 个答案:

答案 0 :(得分:0)

严格来说,您不需要以这种方式选择用户ID。当您刚刚在表中插入数据时,您可以调用insert_id()函数来获取自动生成的id。就是这样。

一般来说,这样的“问题” - 再次:您必须隔离该代码段,添加代码以验证每个单一的前提(var_dumping输入,选择raw没有条件的数据库内容,比较db中的数据和输入(我的意思是代码比较并输出结果))和 - 如果仍然无法解决 - 能够发布两个代码和输出在你的问题中,要使其理智且负责任。

您必须了解代码在真空中不存在。它在服务器上运行,具有独特的环境,它使用数据库,它处理一些输入 - 所有这些事情完全为读者所知 - 因此它提出的问题只包含完全没用的代码。