PDO 获取而不移动内部游标

PDO fetch without moving internal cursor

我有一个叫做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
}

你的例子

$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 应该 return 当前行但继续到下一行,在我看来,这令人困惑。

如果您确实想要 $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()的新函数来获取当前行数据(return $this->row)以免混淆其他开发者。