2015-01-15 5 views
2

시도하고 검색 한 후 다른 사람이 내 문제를 해결할 수 있기를 바랍니다.젠드 프레임 워크에서 MySQL 연결 닫기 (또는 "연결이 너무 많음")

작은 숫자 (100 개 이상 유효)에서 훌륭하게 작동하는 CSV 업로드를 만들었습니다. 2,000 개의 레코드가있는 파일을 테스트 할 때 "연결 오류 : SQLSTATE [08004] [1040] 연결이 너무 많습니다"라는 오류가 발생합니다.

나는,이 오류가 나는 젠드 2에서 수행하는 방법을 알아낼 수 없습니다 삽입 후 내 DB 연결을 종료하여 해결할 수 있습니다 무엇을 말할 수에서

, 모든 결과가 젠드 1. 있습니다

하는 경우가 CSV에서 MySQL에 대용량 레코드를 삽입하는 더 좋은 방법입니다. 그런 다음 제안 사항도 공개합니다.

내 컨트롤러 코드 :

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() 또는 뭔가를 추가 생각합니다.

+0

루프를 반복적으로 반복하기 때문에 새로운 연결을 만들고 결국 mysql의 연결 제한을 초과하게됩니다. 적절한 수정은 반복적 인 연결 호출을 제거하는 것입니다. DB에 대한 새롭고 독립적 인 연결을 필요로하는 사용 사례가 거의 없으며, 이것도 그 중 하나가 아닙니다. –

+0

왜 전체 CSV 가져 오기에 둘 이상의 연결을 사용하고 있습니까? –

답변

0

반복 할 때마다 saveEmployee 메서드를 호출 할 때마다 모든 반복에서 Adapter이라는 새 인스턴스를 만듭니다.

while 루프 (루프 이전)에서 Adapter 초기화를 이동하면 정상이어야합니다.