【发布时间】:2012-08-16 10:42:26
【问题描述】:
我在 PHP 中编写了一个简单的 OCI 包装类,它使用持久连接 (oci_pconnect)。类析构函数调用oci_close。
这个类用于我所有的 AJAX PHP 脚本,因此被大量调用。然而,尽管使用了持久连接并且oci_close 没有从缓存中删除它们(根据我的理解),但与数据库的打开连接数已达到最大值,导致系统失败。我原以为整个应用程序的打开连接数只有一个!
我做错了什么吗?
骨架代码:
class Oracle {
private $connection;
private $connected;
function __construct($connectionString, $username, $password) {
if (!($this->connection = @oci_pconnect($username, $password, $connectionString))) {
echo 'Cannot connect to '.$username.'@'.$connectionString;
$this->connected = false;
} else {
$this->connected = true;
}
}
function __destruct() {
if ($this->connected) {
oci_close($this->connection);
}
}
}
【问题讨论】:
-
我在继承系统时遇到了同样的问题。放弃 oci_pconnect 以支持 oci_connect(非持久性)
-
它解决了问题,所以从来没有发现为什么连接没有被重用。
-
虽然这可以解决问题,但它会使系统明显变慢。
-
所有连接都使用相同的用户名、密码和连接字符串吗?
-
@BobJarvis 是的,它们都连接到同一个 SID 上的同一个模式
标签: php oracle persistence oracle-call-interface