2012-08-11 4 views
2

여기 비슷한 게시물을 모두 읽었 음에 틀림 없습니다. 그러나 왜 이런 일이 발생하는지 파악할 수 없습니다.허용 메모리 크기 67108864 bytes exhausted

내 코드 : 지금이 일하기 전에 호출되는 다른 기능에 동일한 코드를 사용하고 그것은 또 하나 개의 필드를 반환하더라도 잘 작동

$stmt = $this->db->stmt_init(); 
     $stmt->prepare("SELECT Table1.id,Name,type,text,fname,lname FROM Table1, Table2 WHERE Table1.email = Table2.email AND type='text' AND Table1.Id=?"); 
     $stmt->bind_param("i", $id); 
     $stmt->bind_result($legTxtId,$legTxtName, $legTxtType, $legTxtText, $legTxtFname, $legTxtLname); 
     $stmt->execute(); 
     $results = array(); 
     while($stmt->fetch()) 
     { 
      $results[] = array(
        'legTxtId' => $legTxtId , 'legTxtName' => $legTxtName , 'legTxtType' => $legTxtType , 
        'legTxtText' => $legTxtText , 'legTxtFname' => $legTxtFname , 
        'legTxtLname' => $legTxtLname); 
     } 
     $stmt->close(); 
     return $results; 

.

이 사진은 단 한 줄의 짧은 텍스트 (사진이 없거나 아무것도 포함하지 않음) 만 반환하므로 64M보다 확실히 실패하지 않아야합니다.

누구나 문제를 볼 수 있습니까?

+0

'테이블 1'과 '테이블 2'에있는 레코드 수는 얼마나됩니까? – verisimilitude

+0

두 쿼리 모두 한 행 atm .. 반환해야합니다 및 첫 번째 하나 전혀 작동하지 않습니다. 첫 번째 하나를 제거 할 경우에도이 실패하고 해당 쿼리가 유효하다는 것을 알고 있습니다. – mixkat

+2

이 필드는' MEDIUMTEXT','MEDIUMBLOB' 또는 이와 유사한 - 엄청난 양의 데이터를 저장할 수 있습니까? 비슷한 질문이 [최근 게시되었습니다] (http://stackoverflow.com/questions/11913818/php-massive-memory-usage-for-sql-query), 당신은 PDO로 전환하거나 mysqlnd가 그 작업을 할 수 있도록해야 할 수도 있습니다 . – DCoder

답변

1

이 보인다 두 솔루션은 다음과 같습니다

mysqlnd 커넥터 1) 전환이 '아무튼으로 동일한 버그를 보여줍니다.

당신은 당신이에서 LAMP 스택의 사용자 설정을 변경하여 그것을 달성 할 수있다 (아마존 EC2 서버에 예) PHP를 설치하는 냠을 사용하여 사용하는 경우 :

sudo yum install php-mysql php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

에 :

sudo yum install php-mysqlnd php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

2) 대규모 메모리 할당 문제가없는 store_result 또는 use_result를 사용하십시오.

mysqlnd로 전환하는 것이 기존의 php-mysql 커넥터 (PHP 메모리에 복사되기 전에 결과가 MySQL 메모리에 복제되지 않는 등)보다 일반적으로 더 잘 작성되므로 일반적으로 더 나은 장기 솔루션입니다. PHP 5.4.0 이상.

0

왜 하나의 레코드에 while 루프를 사용합니까?

+1

항상 하나의 기록 일 필요는 없습니다.이 단계에서 나는 단지 하나의 기록만을 갖고 있습니다. – mixkat

+0

두 번째 레코드를 추가하고 동일한 스크립트를 실행 해보십시오. 그냥 그래서 밤에 잘 수 있습니다. –

+1

아니요 ... 변경된 사항이 없습니다. – mixkat

0

어쩌면 도움이 될 것입니다 로컬 버퍼로 데이터를 이동 : 다른 질문에서 설명하고있는 바와 같이

// ... 
$stmt->prepare(...); 
$stmt->bind_param(...); 

$stmt->execute(); 
$stmt->store_result(); 

$stmt->bind_result(...); 
// ... 
관련 문제