我有一个名为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
}
答案 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->行),以免混淆其他开发人员。