Мы написали приложение с использованием Doctrine2, которое отлично работает при использовании с базой данных MySQL или Postgres.Проблемы с SELECT с Doctrine и MS SQL 2008
Теперь мы подключили приложение к базе данных SQL Server 2008 с использованием PDO Driver DBLib, которая использует реализацию FreeTDS
для протокола TDS (табличный протокол DataStream), который совместно используется SQL Server и Sybase.
Начальная схема создания, транзакции и INSERT
s в столы прекрасно работают .. после некоторой настройки Doctrine SQLServerPlatform
и нашего пакета драйверов MSSQL.
Но при выборе данных, мы сталкиваемся следующее сообщение об ошибке:
General error: 20019 Attempt to initiate a new Adaptive Server operation with results pending
После большого количества прибегая к помощи я нашел this detail in the FAQ of FreeTDS:
If you are accustomed to programming with other database servers, you may be surprised when you first encounter this aspect of the TDS protocol. [...]
The server requires the client either to read all the results from a query, or to indicate that no further rows are desired i.e., to issue a cancellation. Until one of those two things happens, the server will not accept new queries on that connection. It will complain about "pending results".
Таким образом, причиной появления сообщения об ошибке в том, что по какой-то причине, Doctrine (DBAL-> PDO-> FreeTDS) не считывал все строки результатов из буфера соединения, и сервер/библиотека не разрешает приложению выпускать новый exec()
/execute()
, пока все строки не будут прочитаны.
- Насколько я понимаю, что
$doctrinequery->getResults()
извлекает все результаты до его возвращения? - Насколько я понимаю, что
$entity->getLinkedEntity()
(т. Е.$user->getGroupNames()
) извлекает все результаты до его возвращения? - Как бы вы решали, где именно проблема?
Пакет стека не помогает нам вообще, и кодовая база уже выросла. - У кого-нибудь еще есть эта проблема и вы можете поделиться некоторыми сведениями?
- Есть ли альтернатива, которую мы можем использовать для подключения Доктрины к MSSQL, которая не страдает этой проблемой?