PDO выполнить задачу - PullRequest
1 голос
/ 10 ноября 2009

Я столкнулся с проблемой. Я хочу выбрать все строки, выполнив эту функцию:

 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);

Но все равно не работает.

1 Ответ

2 голосов
/ 10 ноября 2009

Метод 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...