PHP oci超时?

PHP oci timeout?

我想为查询设置超时

$statement = oci_parse($conn, $query);
oci_execute($statement); // timeout if this takes over 5 minutes

这个问题之前有人问过,但一直追溯到 11 年,没有可靠的答案

Run a sql query with a timeout in PHP or How in PHP, to stop a sql query once already begun?

我也发现了去年的这个请求 https://bugs.php.net/bug.php?id=73038

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"');

显然,您需要进行错误处理、退出代码检查等,才能使此产品准备就绪。

您可以使用 oci_set_call_timeout for database call timeouts since oci8 2.2.0.

<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
oci_set_call_timeout($conn, 5000);

?>