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);
?>
我想为查询设置超时
$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);
?>