> YII 类库手册 > CDbDataReader
system.db
继承 class CDbDataReader » CComponent
实现 Iterator, Traversable, Countable
源自 1.0
版本 $Id: CDbDataReader.PHP 3426 2011-10-25 00:01:09Z alexander.makarow $
源码
CDbDataReader代表一个查询结果集的行的只进流。

要阅读当前行数组,调用read。 方法readAll返回在单个数组中的所有行。

可以使用foreach读取CDbDataReader中的行数组:
foreach($reader as $row)
    // $row 表示一个数据行
因为 CDbDataReader 的流只能向前,所以你可以只遍历一次。

也可以使用特定的数据模式读取数据, 通过设置FetchMode。 参见Http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php 为更多细节。

公共属性

属性 类型 描述 定义在
columnCount integer 返回结果集的列数。 CDbDataReader
isClosed boolean 是否此读取器关闭。 CDbDataReader
rowCount integer 返回结果集的行数。 CDbDataReader

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造函数。 CDbDataReader
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__unset() 设置一个组件的属性为null。 CComponent
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
bindColumn() 绑定一列到一个PHP变量。 CDbDataReader
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
close() 关闭此读取器。 CDbDataReader
count() 返回结果集的行数。 CDbDataReader
current() 返回当前行。 CDbDataReader
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaLuateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
getColumnCount() 返回结果集的列数。 CDbDataReader
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getIsClosed() 是否此读取器关闭。 CDbDataReader
getRowCount() 返回结果集的行数。 CDbDataReader
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
key() 返回当前行的索引。 CDbDataReader
next() 移动内部指针到下一行. CDbDataReader
nextResult() 当读取批处理语句的结果时,读取器前进到下一个结果。 CDbDataReader
raiseEvent() 发起一个事件。 CComponent
read() 读取器前进到结果集的下一行。 CDbDataReader
readAll() 读取整个结果集到数组。 CDbDataReader
readColumn() 返回来自一个结果集的下一行的一个单列。 CDbDataReader
readObject() 返回一个填充有下一行数组的对象。 CDbDataReader
rewind() 重置此迭代器为初始状态。 CDbDataReader
setFetchMode() 此语句设置默认读取模式。 CDbDataReader
valid() 返回在当前位置是否有一行数据。 CDbDataReader

属性详细

columnCount 属性 只读
public integer getColumnCount()

返回结果集的列数。 注意,即使在读取器中没有行,这仍将给出正确的列数。

isClosed 属性 只读
public boolean getIsClosed()

是否此读取器关闭。

rowCount 属性 只读
public integer getRowCount()

返回结果集的行数。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。

方法详细

__construct() 方法
public void __construct(CDbCommand $command)
$command CDbCommand 此命令生成查询结果
public function __construct(CDbCommand $command)
{
    
$this->_statement=$command->getPdoStatement();
    
$this->_statement->setFetchMode(PDO::FETCH_ASSOC);
}

构造函数。

bindColumn() 方法
public void bindColumn(mixed $column, mixed &$value, integer $dataType=NULL)
$column mixed 列的数目 (1-indexed) 或列的名称在结果集中。 如果使用列名, 注意列名要和此列的大小写匹配, 和驱动程序返回的一样。
$value mixed 绑定到列的PHP变量名。
$dataType integer 参数的数据类型
public function bindColumn($column, &$value$dataType=null)
{
    if(
$dataType===null)
        
$this->_statement->bindColumn($column,$value);
    else
        
$this->_statement->bindColumn($column,$value,$dataType);
}

绑定一列到一个PHP变量。 当数据行被获取时,相应的列值将用此变量设置。 注意,读取模式必须包含 PDO::FETCH_BOUND。

参见

  • http://www.php.net/manual/en/function.PDOStatement-bindColumn.php
close() 方法
public void close()
public function close()
{
    
$this->_statement->closeCursor();
    
$this->_closed=true;
}

关闭此读取器。 这将释放分配给执行此sql语句的资源。 此方法调用后尝试读取是不可预测的。

count() 方法
public integer count()
{return} integer 返回结果中包含的行数。
public function count()
{
    return 
$this->getRowCount();
}

返回结果集的行数。 这个方法对可数的接口而言是必须的。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。

current() 方法
public mixed current()
{return} mixed 返回当前行。
public function current()
{
    return 
$this->_row;
}

返回当前行。 这个方法对接口迭代器而言是必须的。

getColumnCount() 方法
public integer getColumnCount()
{return} integer 返回结果集的列数。
public function getColumnCount()
{
    return 
$this->_statement->columnCount();
}

返回结果集的列数。 注意,即使在读取器中没有行,这仍将给出正确的列数。

getIsClosed() 方法
public boolean getIsClosed()
{return} boolean 返回是否此读取器关闭。
public function getIsClosed()
{
    return 
$this->_closed;
}

是否此读取器关闭。

getRowCount() 方法
public integer getRowCount()
{return} integer 返回结果中的行数。
public function getRowCount()
{
    return 
$this->_statement->rowCount();
}

返回结果集的行数。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。

key() 方法
public integer key()
{return} integer 返回当前行的索引。
public function key()
{
    return 
$this->_index;
}

返回当前行的索引。 这个方法对接口迭代器而言是必须的。

next() 方法
public void next()
public function next()
{
    
$this->_row=$this->_statement->fetch();
    
$this->_index++;
}

移动内部指针到下一行. 这个方法对接口迭代器而言是必须的。

nextResult() 方法
public boolean nextResult()
{return} boolean 当成功时返回true,失败时返回false。
public function nextResult()
{
    if((
$result=$this->_statement->nextRowset())!==false)
        
$this->_index=-1;
    return 
$result;
}

当读取批处理语句的结果时,读取器前进到下一个结果。 此方法仅在当有多个结果集时有用。 查询返回不是所有的 DBMS 都支持这个功能。

read() 方法
public array|false read()
{return} array|false 返回当前行,如果没有更多的可用行返回false。
public function read()
{
    return 
$this->_statement->fetch();
}

读取器前进到结果集的下一行。

readAll() 方法
public array readAll()
{return} array 返回数组结果集 (每一个数组元素表示一行数据)。 如果结果不包含行,返回一个空数组。
public function readAll()
{
    return 
$this->_statement->fetchAll();
}

读取整个结果集到数组。

readColumn() 方法
public mixed|false readColumn(integer $columnIndex)
$columnIndex integer 从0开始的列索引
{return} mixed|false 当前行的列,如果没有更多可用行返回false。
public function readColumn($columnIndex)
{
    return 
$this->_statement->fetchColumn($columnIndex);
}

返回来自一个结果集的下一行的一个单列。

readObject() 方法
public mixed|false readObject(string $className, array $fields)
$className string 要创建并填充的对象的类名。
$fields array 此数组中的元素被传递到构造函数
{return} mixed|false 返回被填充对象,如果没有更多的可用数据行时返回false。
public function readObject($className,$fields)
{
    return 
$this->_statement->fetchObject($className,$fields);
}

返回一个填充有下一行数组的对象。

rewind() 方法
public void rewind()
public function rewind()
{
    if(
$this->_index<0)
    {
        
$this->_row=$this->_statement->fetch();
        
$this->_index=0;
    }
    else
        throw new 
CDbException(Yii::t('yii','CDbDataReader cannot rewind. It is a forward-only reader.'));
}

重置此迭代器为初始状态。 这个方法对接口迭代器而言是必须的。

setFetchMode() 方法
public void setFetchMode(mixed $mode)
$mode mixed 读取模式
public function setFetchMode($mode)
{
    
$params=func_get_args();
    
call_user_func_array(array($this->_statement,'setFetchMode'),$params);
}

此语句设置默认读取模式。

参见

  • http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php
valid() 方法
public boolean valid()
{return} boolean 返回在当前位置是否有一行数据。
public function valid()
{
    return 
$this->_row!==false;
}

返回在当前位置是否有一行数据。 这个方法对接口迭代器而言是必须的。

上一篇:
下一篇: