文字

PDOStatement::nextRowset

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

PDOStatement::nextRowset 在一个多行集语句句柄中推进到下一个行集

说明

bool PDOStatement::nextRowset ( void )

一些数据库服务支持返回一个以上行集(也被称为结果集)的存储过程。 PDOStatement::nextRowset() 使你能够结合一个 PDOStatement 对象访问第二个以及后续的行集。上述的每个行集可以有不同的列集合。

返回值

成功时返回 TRUE , 或者在失败时返回 FALSE

范例

Example #1 获取由一个存储过程返回的多个行集

下面例子展示了怎样调用一个存储过程,返回三个行集的 MULTIPLE_ROWSETS 。用一个 do / while 循环来循环调用 PDOStatement::nextRowset() 方法, 当不再有行集返回时返回 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 
"Result set  $i :\n" ;
    foreach (
$rowset  as  $row ) {
        foreach (
$row  as  $col ) {
            print 
$col  "\t" ;
        }
        print 
"\n" ;
    }
    print 
"\n" ;
}
?>

以上例程会输出:

Result set 1:
apple    red
banana   yellowResult set 2:
orange   orange    150
banana   yellow    175Result set 3:
lime     green
apple    red
banana   yellow

参见

  • PDOStatement::columnCount() - 返回结果集中的列数
  • PDOStatement::execute() - 执行一条预处理语句
  • PDOStatement::getColumnMeta() - 返回结果集中一列的元数据
  • PDO::query() - Executes an SQL statement, returning a result set as a PDOStatement object

用户评论:

[#1] et dot coder at gmail dot com [2014-10-14 13:37:57]

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);
?>

[#2] guilleamathews at gmail dot com [2011-08-19 05:41:28]

PDO::nextRowset() does not appear to be currently supported by the Firebird PDO driver. Unfortunate.

上一篇: 下一篇: