Изменение QueryTimeout из sqlsrv_query

У меня проблемы с медленно выполняющимся запросом, который время от времени выполняется более 30 секунд, поэтому я хотел бы увеличить время ожидания sqlsrv_query.

Fatal error: Maximum execution time of 30 seconds exceeded

У меня проблемы с моим синтаксисом PHP, как примеры на: http://php.net/manual/en/function.sqlsrv-query.php на самом деле не имеет смысла для меня.

В настоящее время мое подключение / настройка выглядит следующим образом:

$testServer = 'IP\servername,PORT';
$testDetails = array('Database' => 'DBNAME', 'UID' => 'USERNAME', 'PWD' => 'Password');
$testConnect = sqlsrv_connect($testServer, $testDetails);

Насколько я понимаю, мне нужно передать детали тайм-аута в качестве параметров в sqlsrv_connect но я не понимаю мой синтаксис правильно.

(Я оптимизировал запрос настолько, насколько смог, к сожалению, учитывая структуру таблицы БД, я не смог заставить его последовательно возвращаться менее чем за 30 секунд.)

1

Решение

Эта ошибка на самом деле является ошибкой PHP и не имеет ничего общего с драйверами sqlsrv; по умолчанию драйверы sqlsrv будут выполнять запрос, пока не получит результат.

Ключ: QueryTimeout
Значение: положительное целое значение
Описание: Устанавливает время ожидания запроса в секундах. По умолчанию драйвер будет ждать результатов неопределенное время.
(акцент мой)

Источник: Параметр параметров — sqlsrv_query (php.net)


Ошибка max_execution_time определено в файле php.ini — по умолчанию 30 секунд. Поскольку сценарий выполняется более 30 секунд, синтаксический анализатор завершает сценарий, выдавая фатальную ошибку.

Чтобы устранить эту ошибку, вы можете изменить max_execution_time установив в файле php.ini или, в качестве альтернативы, вверху вашего скрипта, добавьте:

ini_set("max_execution_time", value); //The value will only be changed for this script!

куда value это максимальное время в секундах Вы хотите, чтобы скрипт работал.


Поскольку ваш вопрос касается установки времени ожидания для запросов, синтаксис для этого будет:

$result = sqlsrv_query($conn, $query, $params, array("QueryTimeout" => 30));

Где опять же 30 максимальное время в секундах, в течение которого вы хотите выполнить запрос.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]