1

この質問はこのトピックに関連しています。構文を提案されたものに変更したため、コードは次のようになりました。

クラスのメソッド:

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

どの変数も呼び出し元のプログラムに戻されないように見えますが、変数を戻すことができることを明示的に述べる必要があるクラスの何かを見逃していませんか?

print_r()配列を$list作成しましたが、3 つの変数が含まれていません。

データベースには 3 つのエントリが存在します。

取得したデータベース エントリを呼び出し元プログラムの配列に戻す際に何が間違っていますか?

4

1 に答える 1

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 = ?
于 2012-07-03T22:37:17.237 に答える