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)以免混淆其他开发者。
我有一个叫做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)以免混淆其他开发者。