PDOStatement::setFetchMode

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)

PDOStatement::setFetchMode Устанавливает режим выборки по умолчанию для объекта запроса

Описание

public function PDOStatement::setFetchMode(int $mode): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_COLUMN, int $colno): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs = null): true
public function PDOStatement::setFetchMode(int $mode = PDO::FETCH_INTO, object $object): true

Список параметров

mode

Режим выборки: константа семейства PDO::FETCH_*.

colno

Номер столбца.

class

Название класса.

constructorArgs

Аргументы конструктора класса.

object

Объект.

Возвращаемые значения

Функция возвращает логическое значение true.

Список изменений

Версия Описание
8.4.0 Вместо общего логического типа bool теперь возвращается конкретный тип true.

Примеры

Пример #1 Изменение режима выборки

Следующий пример показывает изменение режима выборки по умолчанию для объекта PDOStatement методом PDOStatement::setFetchMode().

<?php

$stmt
= $dbh->query('SELECT name, colour, calories FROM fruit');

$stmt->setFetchMode(PDO::FETCH_NUM);

foreach (
$stmt as $row) {
print
$row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
}

Результат выполнения приведённого примера:

apple   red     150
banana  yellow  250
orange  orange  300
kiwi    brown   75
lemon   yellow  25
pear    green   150

Добавить

Примечания пользователей 3 notes

up
36
Dormilich at netscape dot net
15 years ago
if you want to fetch your result into a class (by using PDO::FETCH_CLASS) and want the constructor to be executed *before* PDO assings the object properties, you need to use the PDO::FETCH_PROPS_LATE constant:

<?php
$stmt = $pdo->prepare("your query");

$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "className", $constructorArguments);

# pass parameters, if required by the query
$stmt->execute($parameters);

foreach ($stmt as $row)
{
    // do something with (each of) your object
}
?>
up
9
Kats
8 years ago
Something very helpful is knowing how to access namespaces from the function. It took me a minute (and Google) to figure out. The ::class property is going to be your best friend in this case.

<?php
$stmt->setFetchMode(PDO::FETCH_CLASS, Name\Space\Class::class);
?>
up
1
stein_AT_rhrk.uni-kl.de
18 years ago
Some note on PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE

It took me some time, to realize, that you can not use this fetch-mode in $stm->setFetchMode(), when you want to retrieve objects from the database whereas the type is defined by the first column in the resultset.
You have to define this mode directly in the $stm->fetch() method.

To make it clearer:

$stm = $pdo->query("SELECT * FROM `foo`);
$stm->setFetchMode(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

$object = $stm->fetch();

Will not return the expected object, whereas

$stm = $pdo->query("SELECT * FROM `foo`");

$object = $stm->fetch(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);

will give you the object of the class, defined in the first column of `foo`.
To Top