簡體   English   中英

從mysql_切換到PDO,登錄腳本不再起作用

[英]Switched from mysql_ to PDO, login script no longer working

我用PDO替換了普通的mysql_ *查詢系統。 但是,我的登錄腳本停止工作。 由於我的用戶名通過了,因此獲取數據一定是一個問題,但是我的密碼沒有通過。

碼:

<?php
session_start();
include('config.php');
include('cipher.php');
$usercheck = $_POST["email"];
$passcheck = $_POST["pass"];
$stmt      = $pdo->prepare('SELECT * FROM users WHERE email = :usercheck');
$stmt->execute(array(
    ':usercheck' => $usercheck
));
$num = $stmt->rowCount();
if ($num == 1) {
    $bcrypt = new Bcrypt(15);
    $record = $stmt->fetchAll();
    $hash   = $record['password'];
    $isGood = $bcrypt->verify($passcheck, $hash);
    if ($isGood == 1) {
        $_SESSION['fname']     = $record['firstname'];
        $_SESSION['lname']     = $record['lastname'];
        $_SESSION['email']     = $record['email'];
        $_SESSION['user']      = $record['email'];
        $_SESSION['uid']       = $record['uid'];
        $_SESSION['birthday']  = $record['birthday'];
        $_SESSION['type']      = $record['pagetype'];
        $_SESSION['backcolor'] = $record['backcolor'];
        $_SESSION['barcolor']  = $record['barcolor'];
        $_SESSION['activated'] = $record['activated'];
        if ($_SESSION['activated'] == 0) {
            $_SESSION['newemail'] = $record['email'];
            unset($_SESSION['fname']);
            unset($_SESSION['lname']);
            unset($_SESSION['email']);
            unset($_SESSION['user']);
            unset($_SESSION['uid']);
            unset($_SESSION['birthday']);
            unset($_SESSION['type']);
            unset($_SESSION['backcolor']);
            unset($_SESSION['barcolor']);
            header('Location: mustactivate.php');
        } else {
            if ($_SESSION['type'] == 1) {
                header('Location: profile.php');
            } else {
                if ($_SESSION['type'] == 2) {
                    header('Location: mypage.php');
                } else {
                    header('Location: setup.php');
                }
            }
        }
    } else
        header('Location: login.php?error=badpass');
} else
    header('Location: login.php?error=bademail');
?>
$record = $stmt->fetchAll();
$hash   = $record['password'];

fetchAll()方法返回一個行數組。 因此不會有任何$record['password']

嘗試使用var_dump($record)告訴自己該變量中的內容。

要解決此問題,您可以使用$record[0]['password'] 否則,如果只需要一行,則可以使用$stmt->fetch()獲取它。

僅僅因為fetchAll將返回一個數組,所以直接使用$record[0]而不是$record例如: $record[0]['password']

或之后$record = $stmt->fetchAll(); $record = $record[0]; 剩下的全部留給$record['field_name']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM