PDOStatement::fetch
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDOStatement::fetch — Извлечение следующей строки из результирующего набора
Описание
$fetch_style
= ?
, int $cursor_orientation
= PDO::FETCH_ORI_NEXT
, int $cursor_offset
= 0
) : mixed
Извлекает следующую строку из результирующего набора объекта PDOStatement.
Параметр fetch_style
определяет, в каком виде PDO вернет
эту строку.
Список параметров
-
fetch_style
-
Определяет, в каком виде следующая строка будет возвращена в вызывающий метод. Это может быть одна из констант
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
. Еслиfetch_style
включает в себя атрибут PDO::FETCH_CLASSTYPE (например,PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE
), то имя класса, от которого нужно создать объект, будет взято из первого столбца.PDO::FETCH_INTO
: обновляет существующий объект запрошенного класса, присваивая значения столбцов результирующего набора именованным свойствам объектаPDO::FETCH_LAZY
: комбинируетPDO::FETCH_BOTH
иPDO::FETCH_OBJ
, создавая новый объект со свойствами, соответствующими именам столбцов результирующего набораPDO::FETCH_NAMED
: возвращает массив такого же вида, как иPDO::FETCH_ASSOC
, но, если есть несколько полей с одинаковым именем, то значением с этим ключом будет массив со всеми значениями из рядов, в которых это поле указано.PDO::FETCH_NUM
: возвращает массив, индексированный номерами столбцов (начиная с 0)PDO::FETCH_OBJ
: создает анонимный объект со свойствами, соответствующими именам столбцов результирующего набораPDO::FETCH_PROPS_LATE
: если используется сPDO::FETCH_CLASS
, конструктор класса будет вызван перед назначением свойств из значений столбцов.
-
cursor_orientation
-
Для объектов PDOStatement представляющих прокручиваемый курсор, этот параметр определяет, какая строка будет возвращаться в вызывающий метод. Значением параметра должна быть одна из констант
PDO::FETCH_ORI_*
, по умолчаниюPDO::FETCH_ORI_NEXT
. Чтобы запросить прокручиваемый курсор для запроса PDOStatement, необходимо задать атрибутPDO::ATTR_CURSOR
со значениемPDO::CURSOR_SCROLL
во время подготовки запроса методом PDO::prepare(). -
offset
-
Для объектов PDOStatement, представляющих прокручиваемый курсор, параметр
cursor_orientation
которых принимает значениеPDO::FETCH_ORI_ABS
, эта величина означает абсолютный номер строки, которую необходимо извлечь из результирующего набора.Для объектов PDOStatement, представляющих прокручиваемый курсор, параметр
cursor_orientation
которых принимает значениеPDO::FETCH_ORI_REL
, эта величина указывает, какая строка относительно текущего положения курсора будет извлечена функцией PDOStatement::fetch().
Возвращаемые значения
В случае успешного выполнения функции возвращаемое значение зависит от режима
выборки. В случае неудачи, функция всегда возвращает false
.
Примеры
Пример #1 Извлечение строк в разных режимах выборки
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Примеры различных режимов работы PDOStatement::fetch */
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("Возвращаем следующую строку в виде анонимного объекта со свойствами, соответствующими столбцам\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: Возвращаем следующую строку в виде анонимного объекта со свойствами, соответствующими столбцам 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';
try {
$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;
}
$stmt = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
function readDataBackwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
try {
$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));
$stmt = null;
}
catch (PDOException $e) {
print $e->getMessage();
}
}
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() - Устанавливает режим выборки по умолчанию для объекта запроса