2017-01-12 2 views
0

Ich möchte verfolgen, wenn Benutzer zuletzt angemeldet, so habe ich eine Spalte in meiner Datenbank hinzugefügt, die Zeitstempel und kann bei jeder Anmeldung aktualisiert werden, und fügte ein Update in die Login-Funktion, aber wenn ich mich anmelde ich bekomme eine Fehlermeldung "SQLSTATE [HY000]: Allgemeiner Fehler" und nichts passiert mit meiner Datenbank, aber wenn ich wieder anmelden klicke loggt mich in Ordnung und aktualisiert die Tabelle, wie ich wollte. Hier ist meine Login-Funktion:Abfrage funktioniert beim zweiten Versuch, aber nicht zuerst

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; 
       } 

Irgendwelche Ideen?

+2

Wetten, dass die Sitzung erst beginnt, nachdem sie eingestellt wurde –

+0

Irgendwelche Vorschläge, wie Sie sie einstellen und dann aktualisieren? – PHPNewbie

+1

überprüfen Sie, ob die Sitzung zuerst eingestellt ist, dann führen Sie die Abfrage - 'if/else' –

Antwort

1

Sie können eigentlich nicht verwenden "fetchAll" nach einem Update ... versuchen Also diese stattdessen:

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; 
       } 

hoffe, das hilft!

+0

Vielen Dank! Ja, weil ich dachte, dass ich darüber nachgedacht habe und es in eine weitere unnötige if-Anweisung eingebettet habe. – PHPNewbie

Verwandte Themen