PDO FETCH_CLASS意外行为

时间:2015-07-24 15:29:16

标签: php pdo

我试图通过DAO返回我的User类的新实例,我正在努力查看它是否正常工作,它肯定没有按照我的预期工作,因为我没有定义用户属性,但我是仍然可以看到数据库中的所有用户字段和值。

类数据库

class Database
{   
    private $dbh;

    public function __construct()
    {
        $this->openConnection();
    }

    private function openConnection()
    {   
        try {
            $this->dbh = new PDO('mysql:host=localhost; dbname=stats', 'user', 'pass');
            $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            'There was an error connecting to the database, error: ' . $e->getMessage();
        }
    }

    public function query($sql, $params)
    {   
        $stmt = $this->dbh->prepare($sql, $params);
        $stmt->execute($params);
        return $stmt;
    }
}

类UserDao

class UserDao
{   
    private $db;
    public function __construct($db) 
    {
        $this->db = $db;  

    }

    public function findById($ward_code)
    {   
        $record = $this->db->query("SELECT * from ward_statistics where WardCode = :WardCode", array(':WardCode' => $ward_code));
        $record->setFetchMode(PDO::FETCH_CLASS, 'User')
        $user = $record->fetch();
        return $user;       
    }
}

类用户

class User 
{
    // with no properties defined, I still get a 
    // full result set from UserDAO::findById()

}

用法

$db = new Database();
$dao = new UserDao($db);
$user = $dao->findById('AMED');
var_dump($user);

从DB中获得具有完整结果集的对象(由WardCode匹配的单行),所有字段都填充了正确的值(来自数据库)。

虽然这似乎没问题 - 我认为PDO :: FETCH_CLASS需要在类中提供属性。

我担心的是,从几天前的question I posted on Code Review开始,我还被告知像findById这样的类方法应该创建新的类实例,或者更新现有的类实例,但我似乎只是在做什么从数据库中检索一行。

由于

1 个答案:

答案 0 :(得分:0)

如果只需要1个对象,请将fetchAll替换为fetch。根据{{​​3}}:

  

PDOStatement :: fetchAll - 返回包含所有结果的数组   设置行

相关问题