PDOStatement::nextRowset

(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

Açıklama

public PDOStatement::nextRowset(): bool

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.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Örnekler

Ö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 bir 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

Ayrıca Bakınız

add a note add a note

User Contributed Notes 4 notes

up
1
guilleamathews at gmail dot com
12 years ago
PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.
up
1
a dot naschekin at mypsw dot ru
5 years ago
When you call $stmt->nextRowset(); it returns TRUE every time and does not stop with FALSE even when no more results left.

It causes  Fatal Error when calling
$results[] = $stmt->fetchAll(PDO::FETCH_ASSOC);
with error message
"PHP message: PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error in ..."
unable to fetch result which not exists.

The desission is try {} catch(e) {}

            $stmt = pdo->query("Call Get_multi_result();");
            do {
                try {
                    $streets[] = $stmt->fetchAll(PDO::FETCH_ASSOC);
                } catch (PDOException $e) {
                   
                }
            } while ($stmt->nextRowset());
up
0
et dot coder at gmail dot com
9 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);
?>
up
-4
alex at 1stleg dot com
7 years ago
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."
To Top