PDOStatement::fetch

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

PDOStatement::fetch Извлечение следующей строки из результирующего набора

Описание

publicPDOStatement::fetch(int$mode = PDO::FETCH_DEFAULT, int$cursorOrientation = PDO::FETCH_ORI_NEXT, int$cursorOffset = 0): mixed

Извлекает следующую строку из результирующего набора объекта PDOStatement. Параметр mode определяет, в каком виде PDO вернёт эту строку.

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

mode

Определяет, в каком виде следующая строка будет возвращена в вызывающий метод. Это может быть одна из констант PDO::FETCH_*. По умолчанию PDO::ATTR_DEFAULT_FETCH_MODE (что равносильно PDO::FETCH_BOTH).

  • PDO::FETCH_ASSOC: возвращает массив, индексированный именами столбцов результирующего набора

  • PDO::FETCH_BOTH (по умолчанию): возвращает массив, индексированный именами столбцов результирующего набора, а также их номерами (начиная с 0)

  • PDO::FETCH_BOUND: возвращает true и присваивает значения столбцов результирующего набора переменным PHP, которые были привязаны к этим столбцам методом PDOStatement::bindColumn()

  • PDO::FETCH_CLASS: создаёт и возвращает объект запрошенного класса, присваивая значения столбцов результирующего набора именованным свойствам класса, и следом вызывает конструктор, если не задан PDO::FETCH_PROPS_LATE. Если mode включает в себя атрибут PDO::FETCH_CLASSTYPE (например, PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE), то имя класса, от которого нужно создать объект, будет взято из первого столбца.

  • PDO::FETCH_INTO: обновляет существующий объект запрошенного класса, присваивая значения столбцов результирующего набора именованным свойствам объекта

  • PDO::FETCH_LAZY: комбинирует PDO::FETCH_BOTH и PDO::FETCH_OBJ и возвращает объект PDORow, который создаёт имена свойств объекта по мере доступа к ним.

  • PDO::FETCH_NAMED: возвращает массив такого же вида, как и PDO::FETCH_ASSOC, но, если есть несколько полей с одинаковым именем, то значением с этим ключом будет массив со всеми значениями из рядов, в которых это поле указано.

  • PDO::FETCH_NUM: возвращает массив, индексированный номерами столбцов (начиная с 0)

  • PDO::FETCH_OBJ: создаёт анонимный объект со свойствами, соответствующими именам столбцов результирующего набора

  • PDO::FETCH_PROPS_LATE: если используется с PDO::FETCH_CLASS, конструктор класса будет вызван перед назначением свойств из значений столбцов.

cursorOrientation

Для объектов PDOStatement представляющих прокручиваемый курсор, этот параметр определяет, какая строка будет возвращаться в вызывающий метод. Значением параметра должна быть одна из констант PDO::FETCH_ORI_*, по умолчанию PDO::FETCH_ORI_NEXT. Чтобы запросить прокручиваемый курсор для запроса PDOStatement, необходимо задать атрибут PDO::ATTR_CURSOR со значением PDO::CURSOR_SCROLL во время подготовки запроса методом PDO::prepare().

cursorOffset

Для объектов PDOStatement, представляющих прокручиваемый курсор, параметр cursorOrientation которых принимает значение PDO::FETCH_ORI_ABS, эта величина означает абсолютный номер строки, которую необходимо извлечь из результирующего набора.

Для объектов PDOStatement, представляющих прокручиваемый курсор, параметр cursorOrientation которых принимает значение PDO::FETCH_ORI_REL, эта величина указывает, какая строка относительно текущего положения курсора будет извлечена функцией PDOStatement::fetch().

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

В случае успешного выполнения функции возвращаемое значение зависит от режима выборки. В случае возникновения ошибки или если больше нет строк, функция возвращает false.

Ошибки

Выдаёт ошибку уровня E_WARNING, если атрибуту PDO::ATTR_ERRMODE установлено значение PDO::ERRMODE_WARNING.

Выбрасывает исключение PDOException, если атрибуту PDO::ATTR_ERRMODE установлено значение PDO::ERRMODE_EXCEPTION.

Примеры

Пример #1 Извлечение строк в разных режимах выборки

<?php
$sth
= $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();


print "PDO::FETCH_ASSOC: ";
print
"Возвращаем следующую строку в виде массива, индексированного именами столбцов\n";
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print
"\n";

print
"PDO::FETCH_BOTH: ";
print
"Возвращаем следующую строку в виде массива, индексированного как именами столбцов, так и их номерами\n";
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print
"\n";

print
"PDO::FETCH_LAZY: ";
print
"Возвращаем следующую строку в виде объекта класса PDORow с именами столбцов в качестве свойств\n";
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print
"\n";

print
"PDO::FETCH_OBJ: ";
print
"Возвращаем следующую строку в виде анонимного объекта со свойствами, соответствующими столбцам\n";
$result = $sth->fetch(PDO::FETCH_OBJ);
print
$result->name;
print
"\n";
?>

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

PDO::FETCH_ASSOC: Возвращаем следующую строку в виде массива, индексированного именами столбцов Array ( [name] => apple [colour] => red ) PDO::FETCH_BOTH: Возвращаем следующую строку в виде массива, индексированного как именами столбцов, так и их номерами Array ( [name] => banana [0] => banana [colour] => yellow [1] => yellow ) PDO::FETCH_LAZY: Возвращаем следующую строку в виде анонимного объекта со свойствами, соответствующими столбцам PDO::FETCH_LAZY: Возвращаем следующую строку в виде объекта класса PDORow с именами столбцов в качестве свойств PDORow Object ( [name] => orange [colour] => orange ) PDO::FETCH_OBJ: Возвращаем следующую строку в виде анонимного объекта со свойствами, соответствующими столбцам kiwi

Пример #2 Выборка строк средствами прокручиваемого курсора

<?php
function readDataForwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
while (
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print
$data;
}
}
function
readDataBackwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
do {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print
$data;
} while (
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
}

print
"Читаем в прямой последовательности:\n";
readDataForwards($conn);

print
"Читаем в обратной последовательности:\n";
readDataBackwards($conn);
?>

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

Читаем в прямой последовательности: 21 10 5 16 0 5 19 20 10 Читаем в обратной последовательности: 19 20 10 16 0 5 21 10 5

Пример #3 Порядок конструкторов

Если объекты забираются с помощью PDO::FETCH_CLASS, сначала присваиваются свойства объекта, а следом вызывается конструктор объекта. Если также задано PDO::FETCH_PROPS_LATE, этот порядок меняется на обратный.

<?php
class Person
{
private
$name;

public function
__construct()
{
$this->tell();
}

public function
tell()
{
if (isset(
$this->name)) {
echo
{$this->name}.\n";
} else {
echo
"У меня ещё нет имени.\n";
}
}
}

$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Person');
$person = $sth->fetch();
$person->tell();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Person');
$person = $sth->fetch();
$person->tell();
?>

Вывод приведённого примера будет похож на:

Я - Alice. Я Alice. У меня ещё нет имени. Я Bob.

Смотрите также

  • PDO::prepare() - Подготавливает запрос к выполнению и возвращает связанный с этим запросом объект
  • PDOStatement::execute() - Запускает подготовленный запрос на выполнение
  • PDOStatement::fetchAll() - Выбирает оставшиеся строки из набора результатов
  • PDOStatement::fetchColumn() - Возвращает данные одного столбца следующей строки результирующего набора
  • PDOStatement::fetchObject() - Извлекает следующую строку и возвращает её в виде объекта
  • PDOStatement::setFetchMode() - Устанавливает режим выборки по умолчанию для объекта запроса
To Top