【问题标题】:PHP oci timeout?PHP oci 超时?
【发布时间】:2017-11-15 18:22:06
【问题描述】:

我想为查询设置超时

$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 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);
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-27
        • 2017-02-27
        • 2021-08-28
        • 2015-02-02
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多