包 | system.db |
---|---|
继承 | class CDbDataReader » CComponent |
实现 | Iterator, Traversable, Countable |
源自 | 1.0 |
版本 | $Id: CDbDataReader.php 3426 2011-10-25 00:01:09Z alexander.makarow $ |
源码 |
要阅读当前行数组,调用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 |
属性详细
返回结果集的列数。 注意,即使在读取器中没有行,这仍将给出正确的列数。
是否此读取器关闭。
返回结果集的行数。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。
方法详细
public void __construct(CDbCommand $command)
| ||
$command | CDbCommand | 此命令生成查询结果 |
public function __construct(CDbCommand $command)
{
$this->_statement=$command->getPdoStatement();
$this->_statement->setFetchMode(PDO::FETCH_ASSOC);
}
构造函数。
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。
public void close()
|
public function close()
{
$this->_statement->closeCursor();
$this->_closed=true;
}
关闭此读取器。 这将释放分配给执行此SQL语句的资源。 此方法调用后尝试读取是不可预测的。
public integer count()
| ||
{return} | integer | 返回结果中包含的行数。 |
public function count()
{
return $this->getRowCount();
}
返回结果集的行数。 这个方法对可数的接口而言是必须的。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。
public mixed current()
| ||
{return} | mixed | 返回当前行。 |
public function current()
{
return $this->_row;
}
返回当前行。 这个方法对接口迭代器而言是必须的。
public integer getColumnCount()
| ||
{return} | integer | 返回结果集的列数。 |
public function getColumnCount()
{
return $this->_statement->columnCount();
}
返回结果集的列数。 注意,即使在读取器中没有行,这仍将给出正确的列数。
public boolean getIsClosed()
| ||
{return} | boolean | 返回是否此读取器关闭。 |
public function getIsClosed()
{
return $this->_closed;
}
是否此读取器关闭。
public integer getRowCount()
| ||
{return} | integer | 返回结果中的行数。 |
public function getRowCount()
{
return $this->_statement->rowCount();
}
返回结果集的行数。 注意,大多数DBMS可能无法给出有意义的计数。 在这种情况下,使用 "SELECT COUNT(*) FROM tableName" 去取得行数。
public integer key()
| ||
{return} | integer | 返回当前行的索引。 |
public function key()
{
return $this->_index;
}
返回当前行的索引。 这个方法对接口迭代器而言是必须的。
public void next()
|
public function next()
{
$this->_row=$this->_statement->fetch();
$this->_index++;
}
移动内部指针到下一行. 这个方法对接口迭代器而言是必须的。
public boolean nextResult()
| ||
{return} | boolean | 当成功时返回true,失败时返回false。 |
public function nextResult()
{
if(($result=$this->_statement->nextRowset())!==false)
$this->_index=-1;
return $result;
}
当读取批处理语句的结果时,读取器前进到下一个结果。 此方法仅在当有多个结果集时有用。 查询返回不是所有的 DBMS 都支持这个功能。
public array|false read()
| ||
{return} | array|false | 返回当前行,如果没有更多的可用行返回false。 |
public function read()
{
return $this->_statement->fetch();
}
读取器前进到结果集的下一行。
public array readAll()
| ||
{return} | array | 返回数组结果集 (每一个数组元素表示一行数据)。 如果结果不包含行,返回一个空数组。 |
public function readAll()
{
return $this->_statement->fetchAll();
}
读取整个结果集到数组。
public mixed|false readColumn(integer $columnIndex)
| ||
$columnIndex | integer | 从0开始的列索引 |
{return} | mixed|false | 当前行的列,如果没有更多可用行返回false。 |
public function readColumn($columnIndex)
{
return $this->_statement->fetchColumn($columnIndex);
}
返回来自一个结果集的下一行的一个单列。
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);
}
返回一个填充有下一行数组的对象。
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.'));
}
重置此迭代器为初始状态。 这个方法对接口迭代器而言是必须的。
public void setFetchMode(mixed $mode)
| ||
$mode | mixed | 读取模式 |
public function setFetchMode($mode)
{
$params=func_get_args();
call_user_func_array(array($this->_statement,'setFetchMode'),$params);
}
此语句设置默认读取模式。
public boolean valid()
| ||
{return} | boolean | 返回在当前位置是否有一行数据。 |
public function valid()
{
return $this->_row!==false;
}
返回在当前位置是否有一行数据。 这个方法对接口迭代器而言是必须的。