Запрос PHP 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";
}
?>

Первоначально я получал ошибку 500 в консоли Chrome, прежде чем перевести ее на тестовую страницу. Теперь я получаю ошибку «эта страница не работает». Это не выплевывает odbc_error.

Я могу повторить запрос и запустить его в окне PL / SQL, и он успешно возвращает данные.

Может ли кто-нибудь увидеть проблему? Я не уверен, есть ли проблема с самим сервером. Я недоумеваю.

* ОБНОВИТЬ *

Я замечаю, что иногда запрос выполняется, иногда это не так. Возможно, подключение к серверу нестабильно. Неуверенный.

Всего 1 ответ


Поскольку в файле журнала указано превышение максимального времени, рассмотрите несколько вариантов:

  1. Оптимизируйте запрос Oracle SQL для работы быстрее, чем значение по умолчанию 30 секунд, которое может включать:

    • Изучение плана выполнения запроса с помощью EXPLAIN PLAN FOR SELECT ...
    • Добавление индексов в таблицу для ускорения сканирования, особенно для полей в WHERE
    • Использование разделов для очень больших таблиц на подмножествах, регулярно запрашиваемых
    • Использование материализованного представления для кэширования дорогостоящих запросов и вызова его в PHP
    • Отрегулируйте хранение данных с нормализацией, чтобы избежать избыточности и неэффективной обработки запросов.
  2. Временно расширьте настройки PHP по умолчанию во время выполнения кода с помощью:

    ini_set('max_execution_time', <SOME NUMBER>);
    
  3. Постоянно расширяйте глобальный параметр PHP в файле php.ini (затем перезапустите его для распространения изменений):

    max_execution_time = <SOME NUMBER>
    

Есть идеи?

10000