Пытаться впервые в 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()
возвращать объекты с одной глобальной настройкой.
Возможно, вы могли бы попробовать расширить класс 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 Я не тестировал его, но похоже, что он получает вы близки к тому, что хотите