Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle DRCP可以与PHP PDO一起使用吗?_Php_Oracle_Pdo - Fatal编程技术网

oracle DRCP可以与PHP PDO一起使用吗?

oracle DRCP可以与PHP PDO一起使用吗?,php,oracle,pdo,Php,Oracle,Pdo,我已经在oracle数据库中设置了数据库驻留连接池。 配置后,我可以使用两种方法从池中获取持久连接: $conn = oci_pconnect('scott', 'tiger', 'ORCL_POOL'); 或者,我可以使用Zend\Db: $db = new \Zend\Db\Adapter\Adapter(array( 'persistent' => true, 'username' => 'scott', 'password' => 'tiger

我已经在oracle数据库中设置了数据库驻留连接池。 配置后,我可以使用两种方法从池中获取持久连接:

$conn = oci_pconnect('scott', 'tiger', 'ORCL_POOL');
或者,我可以使用Zend\Db:

$db = new \Zend\Db\Adapter\Adapter(array(
    'persistent' => true,
    'username' => 'scott',
    'password' => 'tiger',
    'driver' => 'oci8',
    'instance' => 'ORCL_POOL', //configured in tnsnames with (SERVER=POOLED)
));
到目前为止还不错,我可以看到,通过oracle视图(如
V$CPOOL\u CC\u STATS)从池中重用连接

我有一个使用PDO的第三方库,我不知道如何将它配置为使用持久连接。
PDO::ATTR_PERSISTENT
选项听起来不错,但似乎使用了自己的连接缓存(每次都会获得一个新的连接,并在
V$CPOOL\u CC_STATS
中显示为“未命中”)。 例如:


所以它使用OCI进行连接,我告诉它使用持久连接…?

我们与Zend达成了支持协议,我向他们提出了这个问题。他们的回答是,他们引用了Oracle文档和“地下PHP和Oracle手册”:

PDO_OCI和DRCP并不是一个可行的解决方案,因为这些问题非常严重 您正在体验>(PDO希望维护自己的缓存) 如您所知,也没有可靠的连接 网络上关于将两者作为一个有凝聚力的单元的信息。--> (PDO_OCI与DRCP)

这背后的原因是因为Oracle的最佳实践和 《地下PHP和Oracle手册》规定必须使用PHP OCI8。 它具有更好的功能集、性能、可靠性和稳定性。 建议“不”将PDO_OCI用于一般用途。 正如您通过自己的测试所知,DRCP可用于 oci_pconnect(),或使用带有“persistent”选项的Zend\Db

从Oracle Database 11g开始,PHP OCI8可以进行连接池 使用数据库驻留连接池(DRCP)


但是,作为一种解决方法,有一些库(例如)扩展了基本PDO类,并通过oci_*调用实现了这些特性。重要的是,对于我的用例,PDO的持久连接选项是通过
oci_pconnect

实现的。我不理解你的问题。真正的原因是PDO_oci没有使用Oracle的“会话池”,这是一种与DRCP服务器对话的技术。PHP OCI8在内部使用会话池。
$pdo = new \PDO('oci:dbname=ORCL_POOL', 'scott', 'tiger', 
                array(PDO::ATTR_PERSISTENT => true));