После нескольких часов попыток и поисков, я надеюсь, что кто-то может помочь с моей проблемой.
Я создал CSV-загрузку, которая отлично работает на небольших числах (по крайней мере, 100 отлично работает). При тестировании файла с 2000 записями или около того я получаю сообщение об ошибке «Ошибка подключения: SQLSTATE [08004] [1040] Слишком много подключений».
Из того, что я могу сказать, эту ошибку можно устранить, закрыв соединение с БД после вставки, что я не могу понять, как это сделать в Zend 2, все результаты для Zend 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 решит мою проблему.
На каждой итерации вы называете saveEmployee
Метод так на каждой итерации вы делаете новый экземпляр Adapter
,
Переместить ваш Adapter
инициализация из цикла while (перед циклом), и все должно быть в порядке.
Других решений пока нет …