PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
PDOStatement::nextRowset — Çok satır kümeli bir sonuçtaki sonraki satır kümesini geçerli satır kümesi yapar
Bazı veritabanları birden fazla satır kümesi (sonuç kümesi diye de bilinir) döndüren kayıtlı yordamları destekler. PDOStatement::nextRowset() yordamını kullaranak bir PDOStatement nesnesi ile ilişkili satır kümelerinin ikincisine ve sırayla sonraki satır kümelerine erişebilirsiniz. Her satır kümesi diğerlerinden farklı sütunlardan oluşabilir.
Bu işlevin bağımsız değişkeni yoktur.
Başarı durumunda true
, başarısızlık durumunda false
döner.
Örnek 1 - Bir kayıtlı yordamdan dönen çok sayıda satır kümesine erişim
Aşağıdaki örnekte üç satır kümesi döndüren
MULTIPLE_ROWSETS
kayıtlı yordam çağrısının,
yapılışı gösterilmiştir. Döndürülecek satır kümesi kalmayınca false
döndüren PDOStatement::nextRowset() yönteminin bu
özelliğini bir do-while
döngüsünde kullanabiliriz.
<?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. sonuç kümesi:\n";
foreach ($rowset as $row) {
foreach ($row as $col) {
print $col . "\t";
}
print "\n";
}
print "\n";
}
?>
Yukarıdaki örneğin çıktısı:
1. sonuç kümesi: apple red banana yellow 2. sonuç kümesi: orange orange 150 banana yellow 175 3. sonuç kümesi: lime green apple red banana yellow
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
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);
?>
If you use PDO::fetch instead of PDO::fetchAll and do not reach the end the result set, PDO::nextRowset() will fail with "SQLSTATE[HY000]: General error: PDO_DBLIB: dbresults() returned FAIL."