Я изучаю pdo в php, чтобы сделать доступ к базе данных более простым и эффективным. Одно объяснение, которое я прочитал для fetch, - это то, что свойства вашего объекта установлены до того, как вызывается конструктор. Что это значит? Любое направление приветствуется.
PDO PHP Fetch Class
Ответ 1
Это означает, что при использовании PDO для возврата результата в пользовательский объект вам необходимо указать переменные-члены, соответствующие ключам результатов запроса.
например:
class User
{
//Predefine Here
public $id;
public $username;
public $password;
public $email;
public $hash;
public function profileLink()
{
return sprintf('<a href="/profile/%s">%s</a>',$this->id,$this->username);
}
}
$result = $sth->fetchAll(PDO::FETCH_CLASS, "User");
foreach($result as $user)
{
echo $user->profileLink();
}
Таким образом, PDO может устанавливать переменные для объекта за пределами его внутренней области.
если пользовательский класс был таким:
class User
{
}
тогда PDO не сможет установить значения извне области видимости, поскольку не определены свойства.
Ответ 2
Скажите, что у вас есть этот фрагмент кода
<?php
class Foo {
public $bar;
public function __construct()
{
$this->bar = 1;
}
}
$stmt = $dbh->prepare("SELECT bar FROM foo");
$stmt->setFetchMode(PDO::FETCH_CLASS, 'Foo');
$stmt->execute();
$obj = $stmt->fetch()
?>
Свойство bar для $obj будет установлено на "1", а не на то, что было восстановлено из базы данных.
Если вы хотите, чтобы он был установлен на результат из базы данных вместо "1", вы можете изменить режим выборки на
$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Foo');
Это приводит к вызову конструктора перед назначением результатов свойствам
Ответ 3
Оглядываясь на PDO:: FETCH_CLASS, вам не нужно определять переменные как общедоступные, так и частные (с PHP 7.0), вы можете определить пустой класс, а PHP PDO будет заполнять атрибуты как $Class- > атрибут, даже если они не определены.
это очень полезно, потому что вы можете повторно использовать классы с несколькими запросами, которые обрабатывают одну и ту же таблицу, но могут возвращать разные столбцы.