PHP ODBC-запрос не выполняется - PullRequest
0 голосов
/ 18 октября 2018

У меня есть старый сайт, который использует соединение 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 Ответ

0 голосов
/ 18 октября 2018

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

  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>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...