2013-02-27 2 views
2
$data=$stmt->fetchAll(); //Dumping the data shows the result. It is also setting the cursor at the end 

while($data=$stmt->fetch()) 
{ 
//Does not enters loop 
//If fetchAll() removes it work as usual 
} 

데이터를 두 번 가져올 필요가 없습니다. 하지만 내 주요 질문은 어떻게 PDO에서 커서 위치를 재설정입니까?PDO의 커서 위치 재설정

+1

데이터를 두 번 가져올 필요가없는 경우 왜 커서 위치를 재설정 하시겠습니까? –

+0

@ YouCommonSense 확실히 당신은 나의 요점을 놓쳤습니다. PDO에서 커서를 재설정하는 방법을 알고 싶었습니다. 그 Downvote는 전혀 정당하지 않았다. – varuog

답변

6

AFAIK 커서 위치를 PDO로 재설정 할 가능성이 없습니다. 이는 일부 데이터베이스와의 호환성과 관련이 있으며, 내부 커서 재설정을 지원하지 않습니다. 당신이 결과를 통해 두 번 반복 배열로 가져오고이 배열을 반복하려면

는 :

<?php 
$results = $stmt->fetchAll(); 
foreach($results as $row) { 
    // first 
} 

foreach($results as $row) { 
    // second 
} 

편집 일부 데이터베이스는 화면 이동 커서를 지원합니다. 이를 사용하려면 플래그를 prepare 메소드에 추가하십시오 (예제는 PDOFetch documentation page 참조). 그러나 그것은 앞으로 또는 뒤로 움직일 수있는 가능성을 더하고 완전히 되감기 만하는 것은 아닙니다. 또한 모든 데이터베이스가 해당 유형의 커서를 지원하지는 않습니다 (예 : MySQL이 지원하지 않음).

+0

PDO와 함께 사용하려면 http://www.php.net/manual/en/function.mysql-field-seek.php와 같은 것이 있습니까? – varuog

+1

''PDOStatement :: fetch'' 메소드에''PDO :: FETCH_ORI_ABS'' 플래그를 덧붙인 추가 인자를 사용할 수는 있지만, 여기서는 https://bugs.php.net에서 설명한대로 작동하지 않을 것입니다 /bug.php?id=34625 – leafnode

+0

@fallenAngel MySQL은 커서를 지원하지 않습니다. 따라서 PDO도 가능하다면 지원합니다. Mysql에서는 PDO를 사용할 수 없습니다. http://stackoverflow.com/questions/12044636/php-pdo-mysql-scrollable-cursor-doesnt-work – djot