2015-01-15 12 views
2

После долгих попыток поиска и поиска я надеюсь, что кто-то сможет помочь с моей проблемой.Закройте соединение MySQL в Zend Framework (или решение «Слишком много соединений»)

Я создал CSV-загрузку, которая отлично работает на небольших количествах (минимум 100 работает отлично). При тестировании файла с 2000 учетными записями я получаю сообщение об ошибке «Connect Error: SQLSTATE [08004] [1040] Слишком много соединений».

Из того, что я могу сказать, эта ошибка может быть решена путем закрытия моего подключения к БД после вставки, которую я не могу понять, как это сделать в Zend 2, все результаты для Зенда 1.

Если это лучший способ вставить большие записи в MySQL из CSV, тогда я также открыт для этих предложений.

Мой код контроллера:

while ($line = fgetcsv($fp, 0, ",")){ 
    $record = array_combine($header, $line); 
    $record['group_id'] = $extra1; 
    $employee->exchangeArray($record); 
    $this->getEmployeeTable()->saveEmployee($employee); 
} 

И мой saveEmployee код только основной Вставка:

$adapter = new Adapter($dbAdapterConfig); 
$sql = "INSERT INTO......; 
$resultSet = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE); 

Я считаю, добавив closeconnection() или что-то после $ Resultset бы решить мою проблему.

+0

Вы, вероятно, создаете новое соединение навсегда итерации своего цикла, и в конечном итоге вы превысите ограничение на соединение с mysql. Правильным решением будет удаление повторяющихся вызовов соединения. существует очень мало случаев использования, которые когда-либо потребуют новых/независимых подключений к БД, и это не один из них. –

+0

Почему вы используете более одного соединения для всего импорта csv? –

ответ

0

На каждой итерации вы вызываете свой метод saveEmployee, поэтому на каждой итерации вы делаете новый экземпляр Adapter.

Переведите свою Adapter инициализацию из цикла while (перед циклом), и все должно быть хорошо.