결과에서 PDO 재설정 배열 포인터
MySQL에서 PDO 메서드로 전환하는 동안 가져온 메서드를 반복하려고 할 때 문제가 발생할 수 있습니다. 매번 행 0부터 시작하여 두 번 배열합니다. 해결책은 두 방법 간의 접근 방식의 차이점을 이해하는 데 있습니다.
MySQL 프레임워크에서 mysql_data_seek 함수는 행 포인터를 결과 배열 내의 특정 위치로 되감습니다. 그러나 PDO에서는 이 기능을 직접 사용할 수 없습니다. 대신, 원하는 결과를 얻기 위해 두 가지 대체 기술을 사용할 수 있습니다.
결과를 배열에 저장
첫 번째 접근 방식은 설명된 것처럼 결과를 배열에 저장하는 것입니다. 아래 코드 조각에서:
$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); $rows = $stmt->fetchAll(); foreach ($rows as $r) { // first run } foreach ($rows as $r) { // second run }
fetchAll 메서드를 활용하면 전체 결과 집합이 $rows 배열에 저장되므로 다음과 같은 여러 반복이 가능합니다. 재설정 포인터.
쿼리 재실행
또는 쿼리를 다시 실행하도록 선택할 수도 있습니다. 배열 저장 방법보다 효율성은 떨어지지만 결과 집합이 상대적으로 작은 경우 이 접근 방식으로 충분할 수 있습니다.
$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); while($row = $stmt->fetch()) { // first run } $stmt->execute(); //re-execute the query while($row = $stmt->fetch()) { // second run }
쿼리를 다시 실행하면 포인터가 행에서 시작하는 새 결과 집합이 생성됩니다. 영. 이 접근 방식을 사용하면 두 반복 모두 전체 데이터 세트에 액세스할 수 있습니다.
위 내용은 여러 반복에 대한 PDO 결과에서 배열 포인터를 재설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!