2010-04-22 2 views
0

내가 만든 데이터베이스 추상화 라이브러리 함수 query 안에 PDO을 사용하고 있습니다.큰 배열 대신 pdo를 사용하여 데이터베이스에서 반복 가능한 결과 집합을 얻으려면 어떻게해야합니까?

많은 결과가 나오면 메모리를 많이 사용하기 때문에 fetchAll 연관 배열과 반복 가능한 pdo 결과 집합 사이를 토글하는 인수를 제공하고 싶습니다. fetchAll()을 사용하고 있습니다. foreach과 적은 메모리 (어떻게 든)가 필요합니다.

나는 이것에 대해 들었던 것을 기억하고, 나는 PDO 문서를 조사했지만, 그렇게 할 수있는 유용한 방법을 찾을 수 없었다.

플랫 어레이가 아닌 PDO에서 반복 가능한 결과 세트를 얻는 방법을 아는 사람이 있습니까? 그리고 iterable 결과 집합을 사용하면 메모리가 더 쉽다는 것이 맞습니까?

이 경우 중요한 경우 Postgresql을 사용하고 있습니다.

.

.

.

현재 쿼리 기능은 명확성을 위해 다음과 같습니다. 나는 PDOStatement 객체 자체의 형태로 내 해결책을 찾았 것 같은

/** 
* Running bound queries on the database. 
* 
* Use: query('select all from players limit :count', array('count'=>10)); 
* Or: query('select all from players limit :count', array('count'=>array(10, PDO::PARAM_INT))); 
**/ 
function query($sql_query, $bindings=array()){ 
DatabaseConnection::getInstance(); 
$statement = DatabaseConnection::$pdo->prepare($sql_query); 
foreach($bindings as $binding => $value){ 
    if(is_array($value)){ 
    $statement->bindParam($binding, $value[0], $value[1]); 
    } else { 
    $statement->bindValue($binding, $value); 
    } 
} 
$statement->execute(); 
// TODO: Return an iterable resultset here, and allow switching between array and iterable resultset. 
return $statement->fetchAll(PDO::FETCH_ASSOC); 
} 
+0

'fetch()'와 정확히 일치하지 않습니까? http://www.php.net/manual/en/pdostatement.fetch.php 그것은'foreach'로 정확히 iterable이 아니지만'while' 루프에서 잘 작동합니다. –

+0

정말요? 왜냐하면 Fetch는 실제로 반복 단계를 수행하기 때문입니다. 아마 그 말은 그 자체가'-> execute()'다음에 반복적으로 반복 될 수 있다는 것을 의미합니다. 이것은 내가 찾고있는 것에 더 가깝습니다. – Kzqai

+0

당신은 query()를 반복 할 수 있지만 코드에서 어떻게 작동하는지 확신 할 수 없습니다. – Galen

답변

1

이 보이는, 즉는 $statement->execute();를 수행 한 후에 당신은 단순히 그 객체를 통해 $statement 객체와 foreach는 함께 전달할 수 있습니다. 배열로 사용할 수 없지만 다른 모든 것을 할 수 있습니다.