【发布时间】:2015-07-24 15:29:16
【问题描述】:
我正在尝试通过 DAO 返回我的 User 类的新实例,并且正在努力查看它是否正常工作,它肯定没有像我预期的那样工作,因为我没有定义 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);
生成一个对象,该对象具有来自数据库的完整结果集(由 WardCode 匹配的单行),所有字段都填充了正确的值(来自数据库)。
虽然这看起来没问题 - 我认为 PDO::FETCH_CLASS 要求属性在类中可用。
我担心的是,几天前的question I posted on Code Review 还告诉我,诸如 findById 之类的类方法应该创建新的类实例,或者更新现有的类实例,但我似乎正在做的只是检索数据库中的一行。
谢谢
【问题讨论】: