Ошибка извлечения PHP PDO. rowcount = 1, но fetchall возвращает false; - PullRequest
1 голос
/ 07 сентября 2010

У меня возникли проблемы с простым SQL-запросом select.используя php PDO.

по какой-то причине rowcount возвращает 1, но fetch и fetchall оба возвращают false;для меня это означает, что выполнить не удалось, или запрос не дал результатов, которые имели бы количество строк 0. Мой синтаксис sql, насколько я могу сказать, в порядке.

здесь SQL-запрос

SELECT * FROM CustomerAddress WHERE ".CustomerAddress::custAddressID." = :".CustomerAddress::custAddressID." LIMIT 1

вот код.

try{
        if($this->selectCustomerAddressStatement->execute(array(CustomerAddress::custAddressID => $addressID)))
        {
            if($this->selectCustomerAddressStatement->rowCount() == 1)
            {   
                $this->selectCustomerAddressStatement->closeCursor();
                if($temp = $this->selectCustomerAddressStatement->fetch())
                {
                    $customerAddress = new CustomerAddress($temp);
                    if($customerAddress->getCustAddressID() == $addressID)
                    {
                        return $customerAddress;
                    }else{
                        throw new Exception("The Customer Address Retrieved was not what was Asked.");
                    }
                }else{
                    throw new Exception("Failed to retrieve Result set.");
                }
            }else{
                throw new Exception("Statement Returned To Many Results.");
            }
        }else{
            throw new Exception("Failed to Execute Statement.");
        }
    }catch(Exception $e) {
        $this->selectCustomerAddressStatement->closeCursor();
        throw new Exception("Customers:: selectCustomerAddress - ".$e->getMessage());
    }

1 Ответ

2 голосов
/ 07 сентября 2010

Похоже, проблема в следующем:

$this->selectCustomerAddressStatement->closeCursor();

.. который вызывается после подсчета строк.Закрытие курсора, вероятно, освобождает результаты оператора, поэтому выборка ничего не возвращает.Переместите этот вызов в конец, когда закончите извлечение данных.

...