0 关注者

类 yii\db\DataReader

继承yii\db\DataReader » yii\base\BaseObject
实现Countable, Iterator, yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/DataReader.php

DataReader 代表来自查询结果集的单向行流。

要读取当前行数据,请调用 read()。方法 readAll() 将所有行返回到单个数组中。也可以通过迭代读取器来读取数据行。例如:

$command = $connection->createCommand('SELECT * FROM post');
$reader = $command->query();

while ($row = $reader->read()) {
    $rows[] = $row;
}

// equivalent to:
foreach ($reader as $row) {
    $rows[] = $row;
}

// equivalent to:
$rows = $reader->readAll();

请注意,由于 DataReader 是单向流,因此您只能遍历一次。第二次遍历将抛出异常。

可以通过设置 $fetchMode 来使用特定模式的数据获取。有关可能的获取模式的更多详细信息,请参阅 PHP 手册

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$columnCount integer 结果集中的列数。 yii\db\DataReader
$fetchMode integer 获取模式。 yii\db\DataReader
$isClosed boolean 读取器是否已关闭。 yii\db\DataReader
$rowCount integer 结果中包含的行数。 yii\db\DataReader

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\db\DataReader
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
bindColumn() 将列绑定到 PHP 变量。 yii\db\DataReader
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名称。 yii\base\BaseObject
close() 关闭读取器。 yii\db\DataReader
count() 返回结果集中的行数。 yii\db\DataReader
current() 返回当前行。 yii\db\DataReader
getColumnCount() 返回结果集中的列数。 yii\db\DataReader
getIsClosed() 读取器是否已关闭。 yii\db\DataReader
getRowCount() 返回结果集中的行数。 yii\db\DataReader
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject
key() 返回当前行的索引。 yii\db\DataReader
next() 将内部指针移到下一行。 yii\db\DataReader
nextResult() 在读取一批语句的结果时,将读取器推进到下一结果。 yii\db\DataReader
read() 将读取器推进到结果集中的下一行。 yii\db\DataReader
readAll() 将整个结果集读入数组中。 yii\db\DataReader
readColumn() 从结果集的下一行返回单个列。 yii\db\DataReader
readObject() 返回一个使用下一行数据填充的对象。 yii\db\DataReader
rewind() 将迭代器重置为初始状态。 yii\db\DataReader
setFetchMode() 设置此语句的默认获取模式。 yii\db\DataReader
valid() 返回当前位置是否有一行数据。 yii\db\DataReader

属性详情

隐藏继承的属性

$columnCount 公共属性

结果集中的列数。

public integer $columnCount null
$fetchMode 公共属性

获取模式。

public integer $fetchMode null
$isClosed 公共属性

读取器是否已关闭。

public boolean $isClosed null
$rowCount 公共属性

结果中包含的行数。

public integer $rowCount null

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

构造函数。

public void __construct ( yii\db\Command $command, $config = [] )
$command yii\db\Command

生成查询结果的命令

$config array

将用于初始化对象属性的键值对

                public function __construct(Command $command, $config = [])
{
    $this->_statement = $command->pdoStatement;
    $this->_statement->setFetchMode(\PDO::FETCH_ASSOC);
    parent::__construct($config);
}

            
__get() public method

Defined in: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property; 时会隐式调用。

另见 __set().

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只写的

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\BaseObject::__isset()

检查属性是否已设置,即定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时会隐式调用。

注意,如果属性未定义,将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置(非空)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

Defined in: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $object->property = $value; 时会隐式调用。

另见 __get().

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只读的

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

Defined in: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($object->property) 时会隐式调用。

注意,如果属性未定义,此方法将不执行任何操作。如果属性是只读的,它将抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名称

throws yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
bindColumn() public method

将列绑定到 PHP 变量。

当获取数据行时,相应的列值将被设置为变量。注意,获取模式必须包含 PDO::FETCH_BOUND。

另见 https://php.ac.cn/manual/en/function.PDOStatement-bindColumn.php.

public void bindColumn ( $column, &$value, $dataType null )
$column integer|string

结果集中的列号(从 1 开始索引)或列名。如果使用列名,请注意名称应与驱动程序返回的列名匹配大小写。

$value mixed

要绑定列的 PHP 变量的名称。

$dataType integer|null

参数的数据类型

                public function bindColumn($column, &$value, $dataType = null)
{
    if ($dataType === null) {
        $this->_statement->bindColumn($column, $value);
    } else {
        $this->_statement->bindColumn($column, $value, $dataType);
    }
}

            
canGetProperty() public method

Defined in: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

如果属性是可读的,则

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

Defined in: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

如果属性是可写的,则

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method
自 2.0.14 起已弃用。在 PHP >=5.5 上,请使用 ::class 代替。

Defined in: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
close() public method

关闭读取器。

这释放了为执行此 SQL 语句分配的资源。在此方法调用之后进行读取尝试是不可预测的。

public void close ( )

                public function close()
{
    $this->_statement->closeCursor();
    $this->_closed = true;
}

            
count() public method

返回结果集中的行数。

此方法由 Countable 接口要求。请注意,大多数 DBMS 可能不会提供有意义的计数。在这种情况下,使用“SELECT COUNT(*) FROM tableName”来获取行数。

public integer count ( )
return integer

结果中包含的行数。

                #[\ReturnTypeWillChange]
public function count()
{
    return $this->getRowCount();
}

            
current() public method

返回当前行。

此方法由接口 Iterator 要求。

public mixed current ( )
return mixed

当前行。

                #[\ReturnTypeWillChange]
public function current()
{
    return $this->_row;
}

            
getColumnCount() public method

返回结果集中的列数。

注意,即使阅读器中没有行,这也仍然给出正确的列数。

public integer getColumnCount ( )
return integer

结果集中的列数。

                public function getColumnCount()
{
    return $this->_statement->columnCount();
}

            
getIsClosed() public method

读取器是否已关闭。

public boolean getIsClosed ( )
return boolean

读取器是否已关闭。

                public function getIsClosed()
{
    return $this->_closed;
}

            
getRowCount() public method

返回结果集中的行数。

注意,大多数 DBMS 可能不会提供有意义的计数。在这种情况下,使用“SELECT COUNT(*) FROM tableName”来获取行数。

public integer getRowCount ( )
return integer

结果中包含的行数。

                public function getRowCount()
{
    return $this->_statement->rowCount();
}

            
hasMethod() public method

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可以重写此方法。

public boolean hasMethod ( $name )
$name string

方法名称

return boolean

方法是否定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public method

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

如果定义了属性

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另见

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否定义

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public method

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束后调用,此时对象已使用给定的配置初始化。

public void init ( )

                public function init()
{
}

            
key() public method

返回当前行的索引。

此方法由接口 Iterator 要求。

public integer key ( )
return integer

当前行的索引。

                #[\ReturnTypeWillChange]
public function key()
{
    return $this->_index;
}

            
next() public method

将内部指针移到下一行。

此方法由接口 Iterator 要求。

public void next ( )

                #[\ReturnTypeWillChange]
public function next()
{
    $this->_row = $this->_statement->fetch();
    $this->_index++;
}

            
nextResult() public method

在读取一批语句的结果时,将读取器推进到下一结果。

此方法仅在查询返回多个结果集时有用。并非所有 DBMS 都支持此功能。

public boolean nextResult ( )
return boolean

成功时返回 true,失败时返回 false。

                public function nextResult()
{
    if (($result = $this->_statement->nextRowset()) !== false) {
        $this->_index = -1;
    }
    return $result;
}

            
read() public method

将读取器推进到结果集中的下一行。

public array read ( )
return array

当前行,如果不再有行可用,则为 false

                public function read()
{
    return $this->_statement->fetch();
}

            
readAll() public method

将整个结果集读入数组中。

public array readAll ( )
return array

结果集(每个数组元素代表一行数据)。如果结果不包含行,则将返回空数组。

                public function readAll()
{
    return $this->_statement->fetchAll();
}

            
readColumn() public method

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

public mixed readColumn ( $columnIndex )
$columnIndex integer

从零开始的列索引

return mixed

当前行的列,如果不再有行可用,则为 false

                public function readColumn($columnIndex)
{
    return $this->_statement->fetchColumn($columnIndex);
}

            
readObject() public method

返回一个使用下一行数据填充的对象。

public 混合类型 readObject ( $className, $fields )
$className string

要创建和填充的对象的类名

$fields array

此数组的元素将传递给构造函数

return mixed

填充后的对象,如果没有更多数据行可用,则为 false

                public function readObject($className, $fields)
{
    return $this->_statement->fetchObject($className, $fields);
}

            
rewind() 公共方法

将迭代器重置为初始状态。

此方法由接口 Iterator 要求。

public void rewind ( )
throws yii\base\InvalidCallException

如果此方法被调用两次

                #[\ReturnTypeWillChange]
public function rewind()
{
    if ($this->_index < 0) {
        $this->_row = $this->_statement->fetch();
        $this->_index = 0;
    } else {
        throw new InvalidCallException('DataReader cannot rewind. It is a forward-only reader.');
    }
}

            
setFetchMode() 公共方法

设置此语句的默认获取模式。

另请参阅 https://php.ac.cn/manual/en/function.PDOStatement-setFetchMode.php.

public void setFetchMode ( $mode )
$mode integer

获取模式

                public function setFetchMode($mode)
{
    $params = func_get_args();
    call_user_func_array([$this->_statement, 'setFetchMode'], $params);
}

            
valid() 公共方法

返回当前位置是否有一行数据。

此方法由接口 Iterator 要求。

public 布尔值 valid ( )
return boolean

当前位置是否有一行数据。

                #[\ReturnTypeWillChange]
public function valid()
{
    return $this->_row !== false;
}