CDbDataReader

优质
小牛编辑
137浏览
2023-12-01
所有包 | 属性 | 方法
system.db
继承class CDbDataReader » CComponent
实现Iterator, Traversable, Countable
源自1.0
版本$Id: CDbDataReader.php 3426 2011-10-25 00:01:09Z alexander.makarow $
源码framework/db/CDbDataReader.php
CDbDataReader代表一个查询结果集的行的只进流。

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

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

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

公共属性

隐藏继承属性

属性类型描述定义在
columnCountinteger返回结果集的列数。CDbDataReader
isClosedboolean是否此读取器关闭。CDbDataReader
rowCountinteger返回结果集的行数。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)
$commandCDbCommand此命令生成查询结果
源码: framework/db/CDbDataReader.php#49 (显示) publicfunction__construct(CDbCommand$command)
{
$this->_statement=$command->getPdoStatement();
$this->_statement->setFetchMode(PDO::FETCH_ASSOC);
}

构造函数。

bindColumn() 方法
public void bindColumn(mixed $column, mixed &$value, integer $dataType=NULL)
$columnmixed列的数目 (1-indexed) 或列的名称在结果集中。 如果使用列名, 注意列名要和此列的大小写匹配, 和驱动程序返回的一样。
$valuemixed绑定到列的PHP变量名。
$dataTypeinteger参数的数据类型
源码: framework/db/CDbDataReader.php#66 (显示) publicfunctionbindColumn($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()
源码: framework/db/CDbDataReader.php#143 (显示) publicfunctionclose()
{
$this->_statement->closeCursor();
$this->_closed=true;
}

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

count() 方法
public integer count()
{return}integer返回结果中包含的行数。
源码: framework/db/CDbDataReader.php#176 (显示) publicfunctioncount()
{
return$this->getRowCount();
}

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

current() 方法
public mixed current()
{return}mixed返回当前行。
源码: framework/db/CDbDataReader.php#222 (显示) publicfunctioncurrent()
{
return$this->_row;
}

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

getColumnCount() 方法
public integer getColumnCount()
{return}integer返回结果集的列数。
源码: framework/db/CDbDataReader.php#186 (显示) publicfunctiongetColumnCount()
{
return$this->_statement->columnCount();
}

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

getIsClosed() 方法
public boolean getIsClosed()
{return}boolean返回是否此读取器关闭。
源码: framework/db/CDbDataReader.php#153 (显示) publicfunctiongetIsClosed()
{
return$this->_closed;
}

是否此读取器关闭。

getRowCount() 方法
public integer getRowCount()
{return}integer返回结果中的行数。
源码: framework/db/CDbDataReader.php#164 (显示) publicfunctiongetRowCount()
{
return$this->_statement->rowCount();
}

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

key() 方法
public integer key()
{return}integer返回当前行的索引。
源码: framework/db/CDbDataReader.php#212 (显示) publicfunctionkey()
{
return$this->_index;
}

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

next() 方法
public void next()
源码: framework/db/CDbDataReader.php#231 (显示) publicfunctionnext()
{
$this->_row=$this->_statement->fetch();
$this->_index++;
}

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

nextResult() 方法
public boolean nextResult()
{return}boolean当成功时返回true,失败时返回false。
源码: framework/db/CDbDataReader.php#131 (显示) publicfunctionnextResult()
{
if(($result=$this->_statement->nextRowset())!==false)
$this->_index=-1;
return$result;
}

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

read() 方法
public array|false read()
{return}array|false返回当前行,如果没有更多的可用行返回false。
源码: framework/db/CDbDataReader.php#89 (显示) publicfunctionread()
{
return$this->_statement->fetch();
}

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

readAll() 方法
public array readAll()
{return}array返回数组结果集 (每一个数组元素表示一行数据)。 如果结果不包含行,返回一个空数组。
源码: framework/db/CDbDataReader.php#120 (显示) publicfunctionreadAll()
{
return$this->_statement->fetchAll();
}

读取整个结果集到数组。

readColumn() 方法
public mixed|false readColumn(integer $columnIndex)
$columnIndexinteger从0开始的列索引
{return}mixed|false当前行的列,如果没有更多可用行返回false。
源码: framework/db/CDbDataReader.php#99 (显示) publicfunctionreadColumn($columnIndex)
{
return$this->_statement->fetchColumn($columnIndex);
}

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

readObject() 方法
public mixed|false readObject(string $className, array $fields)
$classNamestring要创建并填充的对象的类名。
$fieldsarray此数组中的元素被传递到构造函数
{return}mixed|false返回被填充对象,如果没有更多的可用数据行时返回false。
源码: framework/db/CDbDataReader.php#110 (显示) publicfunctionreadObject($className,$fields)
{
return$this->_statement->fetchObject($className,$fields);
}

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

rewind() 方法
public void rewind()
源码: framework/db/CDbDataReader.php#196 (显示) publicfunctionrewind()
{
if($this->_index<0)
{
$this->_row=$this->_statement->fetch();
$this->_index=0;
}
else
thrownewCDbException(Yii::t('yii','CDbDataReadercannotrewind.Itisaforward-onlyreader.'));
}

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

setFetchMode() 方法
public void setFetchMode(mixed $mode)
$modemixed读取模式
源码: framework/db/CDbDataReader.php#79 (显示) publicfunctionsetFetchMode($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返回在当前位置是否有一行数据。
源码: framework/db/CDbDataReader.php#242 (显示) publicfunctionvalid()
{
return$this->_row!==false;
}

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