Как я могу просто вернуть объекты в PDO?

Пытаться впервые в PDO.

$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password); $stmt = $dbh->query("SELECT * FROM animals"); $stmt->setFetchMode(PDO::FETCH_INTO, new animals); foreach($stmt as $animals) { echo $animals->name; } 

Если я setFetchMode() метод setFetchMode() , тогда мне нужно вызвать $animals["name"] который я не хочу.

Но я не хочу вызывать setFetchMode() для каждого запроса, который я делаю.

Есть ли способ установить FetchMode по умолчанию? Или какой-либо другой способ сделать query() возвращать объекты с одной глобальной настройкой.

Solutions Collecting From Web of "Как я могу просто вернуть объекты в PDO?"

Возможно, вы могли бы попробовать расширить класс PDO для автоматического вызова функции для вас … вкратце:

 класс myPDO расширяет PDO
 {
    функция animalQuery ($ sql)
    {
      $ result = parent :: query ($ sql);
      $ result-> setFetchMode (PDO :: FETCH_INTO, новые животные);
      return $ result;
    }

 // // полезно, если у вас разные классы
 // функция vegetableQuery ($ sql)
 // {
 // $ result = parent :: query ($ sql);
 // $ result-> setFetchMode (PDO :: FETCH_INTO, новые овощи);
 // возвращаем $ result;
 //}
 }

 $ dbh = new myPDO ("mysql: host = $ hostname; dbname = animals", $ username, $ password);

 $ stmt = $ dbh-> animalQuery ("SELECT * FROM animals");

 foreach ($ stmt как $ animals)
 {
     echo $ animals-> name;
 }

Поскольку PDO должен знать, какой объект вы хотите извлечь, вам нужно будет указать его вручную. Но вы просто хотите использовать объект для извлечения данных, а не массива, и не волнует, если он не является объектом животных, вы можете использовать анонимные объекты по умолчанию, когда вы устанавливаете атрибут после строки подключения, которая может быть выполнена в завернутый конструктор

  $connection = new PDO($connection_string); //PDO::FETCH_OBJ: returns an anonymous object with property names that correspond to the column names returned in your result set $connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

Затем все запросы возвращают объекты. Хотя это не совсем то, что вы хотите.


Вы также можете вводить данные в свой класс животных:

 while($dataObj = ...) { $animal = new Animal($dataObj); } 

Если вы посмотрите на функцию запроса, вы можете изменить некоторые параметры, передав дополнительные параметры: http://www.php.net/manual/en/pdo.query.php Я не тестировал его, но похоже, что он получает вы близки к тому, что хотите