2012-07-03 30 views
1

此問題與this主題有關。我改變了語法一個建議,所以我的代碼現在看起來像這樣:變量不能傳回數組

方法類:

private $password; 
private $user_id; 
private $img_thumb; 

public function getUserInfo(){ 
      $stmt = $this->dbh->prepare("SELECT user_id FROM oopforum_users WHERE username = ?"); 
      $stmt->bindParam(1, $this->post_data['username']); 
      $stmt->execute(); 

      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 

       $password = $row['password']; 
       $user_id = $row['user_id']; 
       $img_thumb = $row['thumbnail']; 
      } 
      return array(
       'password' => $this->password, 
       'id' => $this->user_id, 
       'thumb' => $this->img_thumb 
       ); 

     } 

調用程序:

session_start(); 
require_once('init.php'); 

$username = trim($_POST['username']); 
// create a new object 
$login = new Auth($_POST, $dbh); 

    if($login->validateLogin()){ 

     $_SESSION['loggedin'] = true; 
     $list = $login->getUserInfo(); 


     $_SESSION['password'] = $list['password']; 
     $_SESSION['id'] = $list['id']; 
     $_SESSION['thumb'] = $list['img_thumb']; 
} 

變量沒有出現傳遞迴到調用程序中,我是否錯過了需要明確聲明它們可以傳回的類中的某些內容?

I print_r()'d $list數組,它不包含三個變量。

這三個條目確實存在於數據庫中。

我在調用程序中將檢索的數據庫條目返回到數組中時做錯了什麼?

回答

2

在while循環,分配變量到當前對象:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $this->password = $row['password']; 
    $this->user_id = $row['user_id']; 
    $this->img_thumb = $row['thumbnail']; 
} 

更新:你錯過了在SQL的某些字段:

SELECT user_id, password, img_thumb FROM oopforum_users WHERE username = ? 
+0

這沒有奏效。 – crm

+0

這個,或者拿出所有'$ this->',因爲我不確定他們是否有必要。 – jedwards

+0

你確定你從查詢中得到一行嗎? – jedwards