Не получается выполнить прцедуру
Подготовительная часть:
$database = "*************************";
$user = "SYSDBA";
$ps = "*";
$dbh = ibase_connect($database, $user, $ps, 'utf8') or die(json_encode(array('message' => 'not connection', 'successed' => false)));
$stmt = "SELECT * FROM RPT_KMN_BILL(null,190, null, null, null, null, null, 209214, 1) WHERE IS_PRINT = 1";
$result = ibase_query($stmt) or die("Ошибка " . ibase_errcode($link));
Все что вверху выполняется за секунду (и через php и через IBExpert), и без ошибок. Если дальше добавить:
$mass;
if ($result )
{
while(true)
{
$r = ibase_fetch_assoc($result );
if (!$r) break;
$mass[] = $r;
}
}
То при отправке ajax запрос виснет и в конце концов прилетает результат через минут 5:
В FireFox на тот же самый запрос приходит:
Методом проб, понял, что зависание появляется если я использую ibase_fetch_assoc или ibase_fetch_row.
В IBExpert этот-же запрос работает, под тем же пользователем.
В чем может быть причина не выполнения запроса?
Ответы (1 шт):
На вопрос ответить не могу, но процесс дебага могу предложить.
Варианта два:
- либо
ibase_fetch_assocблокируется на чтении - либо получается бесконечный цикл
Чтобы проверить, что происходит, добавить отдельный счетчик вокруг цикла и выводить результат на каждой итерации.
if ($result )
{
// формат цикла, действительно, странный, но менять не буду
$cnt = 0;
while(true)
{
$r = ibase_fetch_assoc($result );
if (!$r) break;
$mass[] = $r;
if (++$cnt > 100) break; // число можно поменять, если надо
echo var_export($r, true) . "\n";
}
}
(всесто echo в цикле можно писать в лог - см. https://www.php.net/manual/en/function.error-log.php , особенно destination = 3 (file) )
Запустив этот код, можнно понять, что возвращает функция ibase_fetch_assoc и почему код зацикливается. Может там просто данных очень много и надо добавить ограничение в запрос? Если же она ничего не возвращает, а зависает, то ... вот тут я не знаю толком, что делать. Разве что проверить, что доступ к базе по сети есть нормальный.


