2013-05-09 5 views
0

데이터베이스 가져 오기를 관리하는 앱 클래스가 있습니다. 대신 클래스의 결과 집합 (PDOStatement) 작업 거기에서 HTML에서 메아리의, 내가 사용 페이지로 다시 설정 한 결과를 반환하고 싶습니다 fetchAll()함수에서 큰 배열을 반환합니다.

return $stmt->fetchAll(PDO::FETCH_ASSOC); 

편집 : 내가 돈 ' 내 지식으로는 복수의 기존 PDOStatement 개체를 단일 연결로 존재하게하는 것이 좋지 않기 때문에 $stmt을 반환하려고합니다. 위험을 피하기 위해 수업 내에서 이러한 개체를 관리하고 싶습니다. 내가 틀렸다면 나를 바로 잡으세요.

어레이가 100k 행 이상이 아니거나 10k-50k가 넘지 않는다고 가정 할 때 성능상의 이유가 있습니까? 나는 그것이 아주 기본적인 것을 알고 있지만, 이것을 처리하는 선호되는 방법은 무엇입니까?

클래스 메서드에서 올바르게 작업하지 않고 메모리를 변경하면 메모리에 미치는 영향이 있습니까? 나는 그것이 괜찮다고 생각하지만, 나는 SO로부터 소식을 듣고 싶었다.

+3

대용량 배열에 큰 영향을 미치고, $ stmt를 반환하지 않고 한 번에 하나의 행을 가져 오지 마십시오. –

+0

다음과 같이 대상 인수를 허용하도록 함수를 정의하십시오. function getData ($ parm1, $ parm2, & $ dest_var)'; 다음과 같이 호출한다 :'$ my_data = NULL; getData ('parm1', 'parm2', $ my_data);'가져 오기 함수 내에서 큰 배열을 반환하지 않고 더 많은 메모리를 효율적으로 사용할 수있는 전달 된 매개 변수에 할당합니다. –

+0

@ MarkBaker 여러 페이지 요소가이 데이터 클래스 객체를 잠재적으로 사용할 수 있으므로 클래스 외부에 여러 PDOStatement 객체가있을 위험을 감수하고 싶지 않습니다. 이미 커서가 끝까지 도달하지 않은 경우 하나 생성하면 실패합니다. 그래서 저는 그것들을 클래스 메소드의 범위 내에서 관리하고 싶습니다. –

답변

0

메모리 문제가있는 경우 fetch all을 호출하는 것은 현재 수행중인 작업에 관계없이 친구가 아니므로 $ stmt-> fetch를 루프로 호출하는 것이 좋습니다. PHP는 함수 내에서 참조 처리에 의해 배열을 전달하므로 다른 것으로 연기하는 것은 거의 동일한 메모리 및 성능 프로파일을 가져야합니다.

+0

'$ stmt'을 반환하고 호출하는 범위에서 루프하는 것을 의미합니까? 왜 내가 그것을 피하기 위해 편집을 참조하십시오. –

+0

더 많은 데이터가 더 많은 리소스를 필요로 할 것입니다. 큰 문제는 어디에 스트레칭 할 공간이 있는지입니다. 데이터베이스가 과도하게로드되어 여러 개의 동시 문이 열려 있으면 문제가 발생하면 fetchAll이 더 좋은 옵션이됩니다. 메모리가 문제라면 statement 객체를 반환하고 호출 범위에서 걷는 것이 더 좋을 것입니다. – Orangepill

관련 문제