POD :: FETCH_CLASS导致无限循环,而PDO :: FETCH_BOTH则不会

时间:2011-10-10 10:14:25

标签: php pdo infinite-loop

我遇到了一个难以跟踪的错误,但我不确定是什么导致了这个错误。我有一个属性类,我希望使用名为 loadProperty()的方法从表属性中获取一个条目。此方法属于单例类(注册表)。

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 个答案:

答案 0 :(得分:2)

无限循环原来是由我自己的错误引起的 - 谁曾想过。通过将PDO的提取模式设置为 PDO :: FETCH_CLASS PDO 会尝试实例化属性的实例,这可能是人们所期望的。但是,模型在其构造函数方法中创建对 Registry 类的引用,从而导致调用 Registry 类的构造函数,其中包含 loadProperty 上面显示的方法。结果是无限循环。