Я пытаюсь выяснить, как извлечь из PDO в свой пользовательский класс и, в общем, API PDO-to-object, и я считаю, что недостаток достойной документации расстраивает. Большинство параметров только задокументированы как опция, в то время как все примеры используют выборку в массивы.
Итак, кто-нибудь может объяснить, как они используются:
Если возможно, я хотел бы получить общее объяснение того, как каждая функция / константа используется для извлечения объектов или каких различий, а также конкретный ответ на вопрос о том, как я получаю в свой класс, например:
class MyRow { public $col1, $col2; }
Вот что мне удалось выяснить:
PDO :: FETCH_OBJ
Используется для ввода нового экземпляра неназванного («анонимного») объекта
PDO :: FETCH_CLASS
Используется для ввода в новый экземпляр существующего класса (имена столбцов должны соответствовать существующим свойствам, или __set
должен использоваться для принятия всех свойств). Конструктор класса будет вызываться после того, как будут установлены свойства.
PDO :: FETCH_CLASSTYPE
Используется с FETCH_CLASS
(побитовое ИЛИ), имя класса для создания экземпляра находится в первом столбце, а не в качестве функции.
PDO :: FETCH_INTO
Используется с тем же типом класса, что и FETCH_CLASS
(должен обрабатывать все столбцы как имена свойств), но обновляет существующий объект, а не создает новый.
PDO :: FETCH_LAZY
Я не знаю, что это делает.
PDOStatement :: выборки
Регулярная команда get-a-row. Я не знаю, как использовать это с FETCH_CLASS
или FETCH_INTO
поскольку не существует способа передать имя класса / экземпляр.
PDOStatement :: fetchObject
Способ выполнения FETCH_CLASS
или FETCH_INTO
, включая прохождение конструкторов args. Без args это сокращение для FETCH_OBJ
.
PDOStatement :: setFetchMode
Способ установки режима выборки по умолчанию, так что PDOStatment::fetch
можно вызвать без аргументов.
Это лучшее, что мне удалось выяснить. Я надеюсь, что это поможет кому-то другому (мне нужен метод fetchObject
)
После подготовки инструкции используйте PDOStatement :: setFetchMode с PDO :: FETCH_CLASS:
$stmt = $pdo->query('SELECT col1, col2 FROM table'); $stmt->setFetchMode(\PDO::FETCH_CLASS, 'MyRow'); $obj = $stmt->fetch();