vstas
@vstas

PHP (и я в том числе) не может получить «большие» данные из хранимой процедуры Mssql ?

Вопрос такой. Есть необходимость получать большие данные в PHP(5.3.3) из mssql.

На mssql сервере создана (не мной и не все подробности до конца известны, но можно запросить) хранимая процедура, приблизительно такого вида:
CREATE PROCEDURE <Имя процедуры>
 @ID int
,@TimeStart datetime
,@TimeEnd datetime
,@Param varchar(200)
,@Language_Name varchar(30)
,@IsShow bit = 0

* * * * черный для меня ящик * * * *

Возможно мне не сообщили, но у этой процедуры есть и OUTPUT параметры.

Основная для меня проблема состоит в том, что процедура может возвращать очень много данных. У PHP заканчивается память и все "финализируется".

Самое неприятное что заканчивается память во время этого вызова, что для меня странно:
$result = mssql_query($query, $conn);
Т.е. до него памяти 2Мб используется, а во время этого вызова вылетаем из перерасхода в 512Мб. (Очень не хотелось бы ставить -1 для лимита памяти в php)

Вот на какой вопрос я хотел попросить помочь ответить тех кто с этим знаком или имеет какие-то соображения на этот счет.

Правильно ли я понимаю процесс? Вызов mssql_query отправляет query на Microsoft SQL сервере, запускается на выполнение процедура с указанным названием, выполняются SQL инструкции и попутно заполняются OUTPUT переменные. А мне сообщается идентификатор ресурса с помощью которого я могу вытащить (mssql_fetch_array) данные уже к себе?


Возможно считываются какие-то данные из OUTPUT переменных уже при вызове mssql_query, а они уже большие и в память не влазят?

Как все это разбирает PHP и может ли это быть связано с OUTPUT переменными?

Пробовал получать данные с помощью PDO. Такая-же проблема, но уже при вызове $stmt->execute();
  • Вопрос задан
  • 2569 просмотров
Пригласить эксперта
Ответы на вопрос 1
Да, на момент вызова функции mssql_query или метода PDO::execute данные выборки грузятся в память.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы