PHP 8.5.0 Alpha 2 available for testing

PDOStatement::nextRowset

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

PDOStatement::nextRowset Переход к следующему набору строк в результате запроса

Описание

public PDOStatement::nextRowset(): bool

Некоторые СУБД поддерживают хранимые процедуры, которые возвращают более одного набора строк (его ещё называют результирующим набором). PDOStatement::nextRowset() позволяет получить доступ ко второму и дальнейшим наборам, соответствующим объекту PDOStatement. Разные наборы строк могут иметь разное количество столбцов.

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

Сигнатура функции не содержит параметров.

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

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Примеры

Пример #1 Извлечение данных из нескольких наборов строк, возвращённых хранимой процедурой

В следующем примере показано, как вызывать хранимую процедуру MULTIPLE_ROWSETS, которая возвращает три набора строк. Мы вызываем PDOStatement::nextRowset() в цикле do-while, пока он не вернёт false и завершит цикл, когда больше не будет доступных результирующих наборов.

<?php
$sql
= 'CALL multiple_rowsets()';
$stmt = $conn->query($sql);
$i = 1;
do {
$rowset = $stmt->fetchAll(PDO::FETCH_NUM);
if (
$rowset) {
printResultSet($rowset, $i);
}
$i++;
} while (
$stmt->nextRowset());

function
printResultSet(&$rowset, $i) {
print
"Результирующий набор $i:\n";
foreach (
$rowset as $row) {
foreach (
$row as $col) {
print
$col . "\t";
}
print
"\n";
}
print
"\n";
}
?>

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

Результирующий набор 1:
apple    red
banana   yellow

Результирующий набор 2:
orange   orange    150
banana   yellow    175

Результирующий набор 3:
lime     green
apple    red
banana   yellow

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

  • PDOStatement::columnCount() - Возвращает количество столбцов в результирующем наборе
  • PDOStatement::execute() - Выполняет подготовленный запрос
  • PDOStatement::getColumnMeta() - Возвращает метаданные столбца в результирующей таблице
  • PDO::query() - Подготавливает и выполняет выражение SQL без заполнителей

Добавить

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

up
2
guilleamathews at gmail dot com
13 years ago
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
up
-2
et dot coder at gmail dot com
10 years ago
on MSSQL and 'dsn' => 'dblib:...',:
If you know how many count rowset then don't use contruction of do..while.

<?php
do {
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
} while (
$pdoStatement->nextRowset()
);
?>
When I get large fetchAll(over 30) for second nextRowset. I get error - Segmentation fault.

Uses step-by-step insted do..while is fix for this bug:
<?php
$pdoStatement
->fetchAll(\PDO::FETCH_ASSOC);
$pdoStatement->nextRowset();
$pdoStatement->fetchAll(\PDO::FETCH_ASSOC);
?>
To Top