POD :: FETCH_CLASS вызывает бесконечный цикл, а PDO :: FETCH_BOTH - нет - PullRequest
3 голосов
/ 10 октября 2011

Я столкнулся с трудной для отслеживания ошибкой, но я не уверен, что вызывает эту ошибку. У меня есть класс Свойство , и я хочу получить одну запись из таблицы свойство с методом с именем loadProperty () . Этот метод является частью одноэлементного класса ( Registry ).

public function loadProperty() {
    $this->load('model', 'property');
    $sth = $this->dbh->prepare("SELECT * FROM property WHERE subdomain = :subdomain LIMIT 1");
    $sth->setFetchMode(PDO::FETCH_CLASS, 'property');
    $data = array('subdomain' => $this->router->subdomain);

    try {
        $sth->execute($data);

        if ($sth->rowCount() == 1) {
            $this->property = $sth->fetch();
        } else {
            $this->property = null;
        }

    } catch (PDOException $exception) {
        // HANDLING EXCEPTION
    }
}

Первая строка метода загружает модель. Он просто ищет файл класса и требует его с помощью require_once .

Все это прекрасно работает, когда я использую PDO :: FETCH_BOTH вместо PDO :: FETCH_CLASS. Я предполагаю, что PDO делает некоторые вещи за кулисами, о которых я не знаю, но это приводит к тому, что мой метод loadProperty вызывается бесконечное количество раз.

Что я здесь пропускаю?

1 Ответ

2 голосов
/ 18 октября 2011

Оказалось, что бесконечный цикл вызван моей собственной ошибкой - кто бы мог подумать. При установке режима выборки PDO на PDO :: FETCH_CLASS , PDO пытается создать экземпляр свойства , что можно ожидать. Однако модель создает ссылку на класс Registry в своем методе конструктора, в результате чего вызывается конструктор класса Registry , который включает показанный метод loadProperty выше. Результатом является бесконечный цикл.

...