为什么扩展PDO会导致内存溢出?

时间:2010-09-22 14:54:51

标签: php database class pdo

我有一个扩展PDO类的类。它叫做数据库。但在特定的函数commit()函数中,它会出现内存溢出错误。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in C:\wamp\www\igadgets\application\includes\base\classes\database.php on line 130

功能是:

function commit() {
    return $this->commit();
}
好奇的是:当我改变我的类不再扩展PDO,但只是将其包含在一个变量中时,错误消失了。

这很好用:

function commit() {
    return $this->pdo->commit();
}

为什么会这样?

1 个答案:

答案 0 :(得分:6)

答案很简单。你的代码错了。它正在进行无限递归。

当你致电$this->commit()时,你正在调用同样的方法。所以它将永远循环,直到你的内存耗尽,或者你溢出堆栈(点击StackOverflow,hehehe)。

相反,更改函数以调用父类的commit()方法(在本例中为PDO::commit()):

function commit() {
    return parent::commit();
}