[英]PDO FETCH_CLASS unexpected behaviour
我正在嘗試通過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要求該屬性在該類中可用。
我擔心的是,根據幾天前我在Code Review上發布的一個問題 ,我還被告知,諸如findById之類的類方法應該創建新的類實例,或者更新現有的類實例,但是我似乎要做的只是檢索數據庫中的一行。
謝謝
如果只需要1個對象,則將fetchAll
替換為fetch
。 根據文件 :
PDOStatement :: fetchAll —返回包含所有結果集行的數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.