Есть задача в которой необходимо подключиться к SQL Server 2005 из под php c фреймворком Yii и выполнить процедуру которая возвращает несколько наборов результатов сразу (2 селекта в процедуре).
Первая часть задачи была успешно решена, для подключения была использована связка FreeTDS + dblib.
Данные удалось получать и записывать, хоть и с определенными трудностями (кодировка).
Со второй задачей возникли проблемы. Что бы получить несколько наборов данных в php не достаточно просто выполнить запрос и пройтись по нему циклом. В таком случае оно вернет только первый набор данных.
Необходимо после прочтения каждого набора перейти к следующему с помощью:
$command->query()->nextResult(); //yii method<br>
Но проблема в том что dblib не имеет такого функционала, и при выполнении этой функции выкидывается Exception:
Driver does not support this function: driver does not support multiple rowsets
вот что на этот счет говорит автор:
Support for multiple result sets will be added as soon as I (or someone
else) get the time to do so.
Датируется это сообщение 2007 годом. Поддержка этой функциональности не появилась до сих пор.
Я начал копать в сторону других драйверов для MSSQL, есть решение с ODBC, но к сожалению оно тоже не подходит, т.к. Yii не имеет его поддержки в AR:
CDbConnection does not support reading schema for odbc database.
Вообщем у меня есть еще один вариант, это смотреть в сторону Windows машины, с драйвером Sqlsrv от майкрософта, но это довольно кардинальные меры.
Саму процедуру я не могу менять. Это ядро чужой системы, к которой у меня есть только рид онли доступ.
Кто ни будь сталкивался подобной проблемой и может знает как её решать? Может быть есть возможность как ни будь откинуть наборы и получить только один, или сразу поместить их в перменные и т.п.