2014-09-30 98 views
0

我有一個名爲getUser的方法,如果參數中提供的用戶名存在,它只會從數據庫中提取記錄。下面是方法:密碼被返回爲NULL ...?

public function getUser($username) 
    { 
     $userInfo = array(
     'username' => $username 
     ); 

     if (! $stmt = $this->Connection()->prepare("SELECT * FROM " . $this->_info['Prefix'] . "users 
     WHERE `".implode("`, `", array_keys($userInfo))."` = ?")) 
     { 
      echo 'Prepare Failed: ' . $stmt->error . '<br />'; 
      return FALSE; 
     } 

     if (! $stmt->bind_param('s', $userInfo['username'])) 
     { 
      echo 'Bind Failed: ' . $stmt->error . '<br />'; 
      return FALSE; 
     } 

     if (! $stmt->execute()) 
     { 
      echo 'Execute Failed: ' . $stmt->error . '<br />'; 
      return FALSE; 
     } 

     $stmt->store_result(); 

      if ($stmt->num_rows == 0) 
      { 
       $this->_user['exists'] = FALSE; 
      } 
      else 
      { 
       $this->_user['exists'] = TRUE; 
      } 

     $stmt->bind_result($username, $password); 
     $stmt->fetch(); 

     $this->_user['username'] = $username; 
     $this->_user['password'] = $password; 


      $stmt->close(); 
      return $this->_user; 
    } 

正如你可以在方法的結尾看到我返回_user陣列我在叫checkPassword另一種方法使用。這是它出錯的地方,我的意思是密碼是NULL。爲了確保這個查詢沒有錯誤,我輸出了用戶名(這是從getUser方法返回的),它是正確的。所以我知道查詢正在執行並存儲值,但密碼正在以NULL的形式返回。這裏是checkPassword方法:

public function checkPassword($username, $password) 
    { 
     $info = $this->getUser($username); 

     if ($info['exists'] == FALSE) { 
      exit('The specified user does not exist!'); 
     } 

     if (password_verify($password, $info['password'])) 
     { 
      echo 'YAY'; 
     } 
     else 
     { 
      echo 'NAY'; 
     } 

    } 

正如你可能已經猜到輸出我得到的是NAY即使密碼是正確的。當我查看$info['password']的值時,它只是NULL

爲什麼密碼被返回爲NULL

回答

0

您應該將查詢從改變:

"SELECT * FROM " 

"SELECT username, password FROM " 

現在,如果你在你的用戶表中有多個列,您可以分配內部getUser()功能的其他領域$password$username變量