我遇到了一个问题。我想通过执行此功能来选择所有行:
public function executeQuery($query,$fetch_mode=null) {
$rs = null;
if ($stmt = $this->getConnection()->prepare($query)) {
if ($this->executePreparedStatement($stmt, $rs,$fetch_mode)) {
return $rs;
}
} else {
throw new DBError($this->getConnection()->errorInfo());
}
}
private function executePreparedStatement($stmt, & $row = null,$fetch_mode=null) {
$boReturn = false;
if($fetch_mode==null) $fetch_mode=$this->fetch_mode;
if ($stmt->execute()) {
if ($row = $stmt->fetch($fetch_mode)) {
$boReturn = true;
} else {
$boReturn = false;
}
} else {
$boReturn = false;
}
return $boReturn;
}
但是当我从索引页面调用它时:
$objDB=new DB();
$objDB->connect();
// executeQuery returns an array
$result=$objDB->executeQuery("SELECT * FROM admin");
var_dump($result);
只检索一行而不是所有行。
我还使用以下方式设置模式:
$result=$objDB->executeQuery("SELECT * FROM admin",PDO::FETCH_ASSOC);
但它仍然不起作用。
答案 0 :(得分:2)
fetch方法仅返回当前行并将行指针设置为下一行。要读取PHP数组中的所有数据,可以使用fetchAll()。
另外,在PHP中返回引用并不是一个好主意,因为它会混淆PHP的写时复制机制,并且经常会造成麻烦。
所以我会编写类似这样的oyure代码:
public function executeQuery($query,$fetch_mode=null) {
if ($stmt = $this->getConnection()->prepare($query)) {
$ret = $this->executePreparedStatement($stmt, $fetch_mode);
return $ret;
}
throw new DBError($this->getConnection()->errorInfo());
}
private function executePreparedStatement($stmt, $fetch_mode=null) {
if($fetch_mode==null) $fetch_mode=$this->fetch_mode;
if ($stmt->execute()) {
if ($rows = $stmt->fetchAll($fetch_mode)) {
return $rows;
}
}
return false;
}