2010-05-28 3 views
0

Более года назад я создал свои собственные классы баз данных, которые используют PDO, и обрабатывают все готовые, исполняемые и закрывающие соединения. До сих пор эти классы работали отлично.PDO Database Connections Задача

Есть два разных разделителя базы данных, с которыми я берусь, MySQL и MS SQL Express. Я извлекаю идентификатор сотрудника с сервера MySQL и использую его для получения информации о сотрудниках с сервера MS SQL. Есть около 11 тыс. Записей, поступающих с сервера MySQL, и моя программа составляет всего лишь 1200 до сбоя с ошибкой, подобной следующей.

Connection failed (odbc:Driver=FreeTDS;Servername=MSSQLExpress;Database=SMDINC) Class (PDOException) 
SQLSTATE[08001] SQLDriverConnect: 0 [unixODBC][FreeTDS][SQL Server]Unable to connect to data source 

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

Я полагаю, что проблема заключается в том, что существует множество создаваемых соединений, но я пытался закрыть все соединения во многих разных местах, и ничто, кажется, не устраняет проблему. Любая отладочная помощь или предложения будут оценены!

Craig Metrolis

ОБНОВЛЕНО

Хорошо, я нашел эту проблему, я использовал closeCursor после получения запроса и до выполнения. Я вытащил closeCursor и, похоже, исправил эту проблему .... НО ПОЧЕМУ ??? Это не имеет никакого смысла для меня .....

ответ

0

PDOStatement :: closeCursor() освобождает подключение к серверу, так что другие операторы SQL могут быть выданы, но оставляет заявление в state , что позволяет выполнить его снова.

Другими словами, это закрыло ваше соединение.

Это все еще не объясняет, почему оно получило 1200 записей до того, как возникла проблема.

+0

Спасибо за ответ Р. Да, очень странно и то, что я использовал эти запросы почти так же, как эти, во всех моих других программах без проблем. Я также подумал, что если я создаю новые объекты каждый раз, когда closeCursor должен только закрывать sth в текущем объекте. Как вы думаете, я должен просто оставить это? Или лучше, если я найду способ работать? – Metropolis

+0

@Metropolis: Извините, что не отвечал раньше. Курсор должен автоматически закрываться, когда PDOStatement выходит из памяти, поэтому вы должны быть в порядке, оставляя его выключенным. – Powerlord

+0

Круто спасибо за ответ R :) – Metropolis

Смежные вопросы