Intereting Posts
заменить & for & amp; Как заменить регулярное выражение в MySQL? Использовать параметр в функции, переданной в google.setOnLoadCallback (); php: поиск электронной почты, которая поддерживает очередь сообщений Параметры загрузки изображений Dropzone не работают :( Magento вызывает cms-страницу через тег привязки из файла phtml Каков наилучший способ отправки электронной почты сотням получателей из приложения Zend Framework? Каким образом можно документировать файлы, классы и конструкторы? Неустранимая ошибка: вызов функции-члена bindParam () codeigniter 2 и как отключить xss для TinyMCE Symfony2 – как я могу настроить пользовательские заголовки? Используйте дефис (-) вместо косой черты (/) или подчеркивания (_) в маршрутах Получить текстовый узел с помощью простого HTML DOM Parser Проверка транзакции Paypal через информацию POST Неустранимая ошибка: вызов функции-члена fetch_assoc () для не-объекта

PDO PHP Fetch Class

Я изучаю pdo в php, чтобы сделать доступ к базе данных более простым и эффективным. Одно объяснение, которое я прочитал для fetch, – это то, что свойства вашего объекта установлены до того, как вызывается конструктор. Что это значит? Любое направление приветствуется.

Это означает, что при использовании 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 не сможет установить значения извне области, так как не определены свойства.

Скажем, у вас есть этот фрагмент кода

 <?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'); 

Это приводит к вызову конструктора перед назначением результатов свойствам

Оглядываясь на PDO :: FETCH_CLASS, вам не нужно определять переменные как общедоступные, так и частные (с PHP 7.0), вы можете определить пустой класс, а PHP PDO будет заполнять атрибуты как атрибут $ Class->, даже если они не определены.

это очень полезно, потому что вы можете повторно использовать классы с несколькими запросами, которые обрабатывают одну и ту же таблицу, но могут возвращать разные столбцы