无需移动内部光标即可获取PDO

时间:2015-02-17 22:53:29

标签: php pdo fetch

我有一个名为getField的方法,它调用fetch,我想知道是否有类似fetch的方法,只是它没有移动内部游标向前,而是保持原状。

所以,我有以下方法:

public function getField($field_name){
    if(!is_array($this->row) || empty($this->row)){
        $this->row = $this->stmt->fetch(PDO::FETCH_ASSOC);
    }
    return $this->row[$field_name];
}

public function nextRow($type = PDO::FETCH_ASSOC){
    if(!($this->stmt instanceof PDOStatement)){
        return array();
    }
    $this->row = $this->stmt->fetch($type);
    $this->setArray($this->row);
    return $this->row;
}

当我呼叫getFields然后nextRow时,光标会在调用nextRow之前向前移动。当发生这种情况时,我希望光标保持原样并且仅在调用nextRow时增加。有这样的事吗?

示例

$this->db->query($somequery, $arrary_replacements);
if($this->db->getField("myField") === null){
    // Do some stuff
    // Do some database queries too
}else{
    $row = $this->db->nextRow();
    // Process $row
}

1 个答案:

答案 0 :(得分:0)

您的示例

$this->db->query($somequery, $arrary_replacements);
if($this->db->getField("myField") === null){
    // Do some stuff
    // Do some database queries too
}else{
    $row = $this->db->nextRow();
    // Process $row
}

在我看来,你的示例用法是有缺陷的。您已经使用getField()访问了第一行,因此从逻辑上讲,我认为nextRow()应该获得第二行。否则你说nextRow应该返回当前行,但继续到下一行,这通过我的眼睛,令人困惑。

如果您确实希望$row进行处理,那么为什么不这样做呢?

$this->db->query($somequery, $arrary_replacements);
$row = $this->db->nextRow();
if($row['myField'] === null){
    // Do some stuff
    // Do some database queries too
}else{
    // Process $row
}

否则,我认为您应该考虑添加一个名为getRow()currentRow()的新函数来获取当前行数据(返回$ this->行),以免混淆其他开发人员。