查询第二次尝试但不是第一次

时间:2017-01-12 20:02:32

标签: php mysql

我想跟踪用户上次登录的时间,所以我在我的数据库中添加了一个带有时间戳的列,每次登录时都可以更新,并在登录功能中添加了更新,但是当我登录时得到一个错误,说'SQLSTATE [HY000]:一般错误',我的数据库没有任何反应,但如果我再次点击登录,它会让我记录正常,并按我的意愿更新表格。 这是我的登录功能:

public function login($email,$upass)
{
    try
    {
        $stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
        $stmt->execute(array(":email_id"=>$email));
        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

        if($stmt->rowCount() == 1)
        {
            if($userRow['userStatus']=="Y")
            {
                if($userRow['userPass']==md5($upass))
                {

                    $_SESSION['userSession'] = $userRow['userID'];
                    $stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
                    $stmt->execute(array(":email_id"=>$email));
                    $userRow=$stmt->fetchAll(PDO::FETCH_ASSOC);
                    return true;
                }

任何想法?

1 个答案:

答案 0 :(得分:1)

你实际上无法使用" fetchAll"更新后...所以请尝试这样做:

public function login($email,$upass) {
    try {
        $select_user_stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
        $select_user_stmt->execute(array(":email_id"=>$email));
        $userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);

        if($select_user_stmt->rowCount() == 1) {
            if($userRow['userStatus']=="Y") {
                if($userRow['userPass'] == md5($upass)) {
                    $_SESSION['userSession'] = $userRow['userID'];
                    $update_user_stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
                    $update_user_stmt->execute(array(":email_id"=>$email));
                    $select_user_stmt->execute(array(":email_id"=>$email)); // do a search again here...
                    $userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);
                    return true;
                }

希望这有帮助!