PHP ODBC查询不执行

时间:2018-10-18 14:11:56

标签: php oracle odbc

我有一个使用odbc连接的旧站点。由于某种原因,查询现在失败了。

我创建了一个测试页面,该页面调用了我一直在使用的相同数据库连接脚本:

<?php
  $db_host = "MAINHOST";
  $db_user = "MAINUSER";
  $db_pass = "MAINPASS"; 
  $db_odbc = "MAINDB";

  $connect = odbc_connect($db_odbc, $db_user, $db_pass) or die ("Could not connect to Oracle");
?>

我可以测试此页面并确认确实存在良好的连接。

这是一个示例查询:

<?php
include("include/database.php"); 

if($connect)  // just added this. figured I'd make sure the connection is good before proceeding
{
  $queryMain = "SELECT a_bunch_of_records FROM a_table WHERE a_bunch_of_where_clauses";
  $resultMain = odbc_exec($connect, $queryMain);

  if($resultMain)
  {
    echo "query successful";
  } 
  else
  {
    echo "query failed " . odbc_error();
  }
}
else
{
   echo "no connection";
}
?>

我最初在Chrome控制台中遇到500错误,然后才将其移至测试页。现在,我收到“此页面无法正常工作”的错误。它不会吐出odbc_error。

我可以回显查询并在PL / SQL窗口中运行它,它成功返回数据。

有人可以看到问题吗?我不确定服务器本身是否有问题。我很困惑。

*更新*

我注意到有时查询运行,有时却没有。也许与服务器的连接不稳定。不确定。

1 个答案:

答案 0 :(得分:1)

由于日志文件表明已超出最大执行时间,请考虑以下几种选择:

  1. 优化Oracle SQL查询以使其比默认的30秒运行速度快,这可能涉及:

    • 使用EXPLAIN PLAN FOR SELECT ...调查query execution plan
    • 向表添加索引以加快扫描速度,尤其是对WHERE子句中的字段进行扫描
    • 对定期查询的子集上的大型表使用partitions
    • 使用materialized view缓存昂贵的查询并在PHP中调用
    • 通过标准化调整数据存储,以避免冗余和低效率的查询处理
  2. 在代码执行期间临时扩展默认PHP设置:

    ini_set('max_execution_time', <SOME NUMBER>);
    
  3. 永久扩展php.ini文件中的全局PHP设置(然后重新启动服务器以传播更改):

    max_execution_time = <SOME NUMBER>