Пытаться впервые в 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 Я не тестировал его, но похоже, что он получает вы близки к тому, что хотите