【问题标题】:PHP oci timeout?PHP oci 超时?
【发布时间】:2017-11-15 18:22:06
【问题描述】:
【问题讨论】:
标签:
php
oracle-call-interface
【解决方案1】:
PHP OCI driver 不支持在与 Oracle 库的接口处查询超时(通过PDO::ATTR_TIMEOUT)。因此,没有直接的用户空间方式来实现这一点。
执行此操作的标准方法是执行一个本身有超时的单独进程。你可以这样做:
// oci8-exec.php
set_time_limit(300); // 5 minutes
$conn = getDatabaseConnection();
$stmt = oci_parse($conn, $_SERVER['argv'][1]);
oci_execute($stmt);
oci_fetch_all($stmt, $rows);
var_export($rows);
然后在你的代码中做:
$rows = shell_exec('oci8-exec.php "select * from foo"');
显然,您需要进行错误处理、退出代码检查等,以使该产品做好准备。
【解决方案2】:
看起来您可以使用oci_set_call_timeout 来处理自oci8 2.2.0 以来的数据库调用超时。
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
oci_set_call_timeout($conn, 5000);
?>