PDOStatement::fetch

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::fetch — 결과 집합에서 다음 행을 가져옵니다.


설명

public PDOStatement::fetch(int $mode = PDO::FETCH_DEFAULT, int $cursorOrientation = PDO::FETCH_ORI_NEXT, int $cursorOffset = 0): mixed

PDOStatement 개체와 연결된 결과 집합에서 행을 가져옵니다. mode 매개변수는 PDO가 행을 반환하는 방법을 결정합니다.


매개변수

mode
다음 행이 호출자에게 반환되는 방법을 제어합니다. 이 값은 PDO::FETCH_* 상수 중 하나여야 하며 기본값은 PDO::ATTR_DEFAULT_FETCH_MODE(기본값은 PDO::FETCH_BOTH)입니다.
  • PDO::FETCH_ASSOC: 결과 집합에 반환된 대로 열 이름으로 인덱싱된 배열을 반환합니다.
  • PDO::FETCH_BOTH (default): 결과 집합에 반환된 대로 열 이름과 0으로 인덱싱된 열 번호로 인덱싱된 배열을 반환합니다.
  • PDO::FETCH_BOUND: true를 반환하고 결과 집합의 열 값을 PDOStatement::bindColumn() 메서드로 바인딩된 PHP 변수에 할당합니다.
  • PDO::FETCH_CLASS: PDO::FETCH_PROPS_LATE도 제공되지 않는 한 요청된 클래스의 새 인스턴스를 반환하고 결과 집합의 열을 클래스의 명명된 속성에 매핑하고 생성자를 나중에 호출합니다. mode에 PDO::FETCH_CLASSTYPE이 포함된 경우(예: PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE) 클래스 이름은 첫 번째 열의 값에서 결정됩니다.
  • PDO::FETCH_INTO: 요청된 클래스의 기존 인스턴스를 업데이트하여 결과 집합의 열을 클래스의 명명된 속성에 매핑합니다.
  • PDO::FETCH_LAZY: PDO::FETCH_BOTHPDO::FETCH_OBJ를 결합하여 액세스할 때 개체 변수 이름을 만듭니다.
  • PDO::FETCH_NAMED: PDO::FETCH_ASSOC와 동일한 형식의 배열을 반환합니다. 단, 동일한 이름의 열이 여러 개 있는 경우 해당 키가 참조하는 값은 해당 열 이름을 가진 행의 모든 ​​값의 배열이 됩니다.
  • PDO::FETCH_NUM: 열 0에서 시작하여 결과 집합에 반환된 열 번호로 인덱싱된 배열을 반환합니다.
  • PDO::FETCH_OBJ: 결과 집합에 반환된 열 이름에 해당하는 속성 이름을 가진 익명 개체를 반환합니다.
  • PDO::FETCH_PROPS_LATE: PDO::FETCH_CLASS와 함께 사용하면 해당 열 값에서 속성이 할당되기 전에 클래스의 생성자가 호출됩니다.
cursorOrientation
스크롤 가능한 커서를 나타내는 PDOStatement 개체의 경우 이 값은 호출자에게 반환될 행을 결정합니다. 이 값은 PDO::FETCH_ORI_* 상수 중 하나여야 하며 기본값은 PDO::FETCH_ORI_NEXT입니다. PDOStatement 객체에 대해 스크롤 가능한 커서를 요청하려면 PDO::prepare()로 SQL 문을 준비할 때 PDO::ATTR_CURSOR 속성을 PDO::CURSOR_SCROLL로 설정해야 합니다.
offset
cursor_orientation 매개변수가 PDO::FETCH_ORI_ABS로 설정된 스크롤 가능한 커서를 나타내는 PDOStatement 객체의 경우 이 값은 결과 집합에서 가져올 절대 행 수를 지정합니다.

cursor_orientation 매개변수가 PDO::FETCH_ORI_REL로 설정된 스크롤 가능한 커서를 나타내는 PDOStatement 객체의 경우 이 값은 PDOStatement::fetch()가 호출되기 전에 커서 위치를 기준으로 페치할 행을 지정합니다.


반환 값

성공 시 이 함수의 반환 값은 가져오기 유형에 따라 다릅니다. 모든 경우에 실패 시 false가 반환됩니다.


Examples

예제 #1 다른 가져오기 스타일을 사용하여 행 가져오기

                  
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Exercise PDOStatement::fetch styles */
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name\n");
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");

print("PDO::FETCH_BOTH: ");
print("Return next row as an array indexed by both column name and number\n");
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print("\n");

print("PDO::FETCH_LAZY: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print("\n");

print("PDO::FETCH_OBJ: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->name;
print("\n");
?>
                  
                

위의 예는 다음을 출력합니다.

PDO::FETCH_ASSOC: Return next row as an array indexed by column name
Array
(
    [name] => apple
    [colour] => red
)

PDO::FETCH_BOTH: Return next row as an array indexed by both column name and number
Array
(
    [name] => banana
    [0] => banana
    [colour] => yellow
    [1] => yellow
)

PDO::FETCH_LAZY: Return next row as an anonymous object with column names as properties
PDORow Object
(
    [name] => orange
    [colour] => orange
)

PDO::FETCH_OBJ: Return next row as an anonymous object with column names as properties
kiwi
                

예제 #2 스크롤 가능한 커서로 행 가져오기

                  
<?php
function readDataForwards($dbh) {
    $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
        $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
        print $data;
    }
}
function readDataBackwards($dbh) {
    $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
    do {
        $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
        print $data;
    } while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
}

print "Reading forwards:\n";
readDataForwards($conn);

print "Reading backwards:\n";
readDataBackwards($conn);
?>
                  
                

위의 예는 다음을 출력합니다.

Reading forwards:
21    10    5
16    0     5
19    20    10

Reading backwards:
19    20    10
16    0     5
21    10    5
                

예제 #3 Construction order

PDO::FETCH_CLASS를 통해 개체를 가져올 때 개체 속성이 먼저 할당된 다음 클래스의 생성자가 호출됩니다. PDO::FETCH_PROPS_LATE도 제공되면 이 순서가 반대로 됩니다. 즉, 먼저 생성자가 호출되고 그 후에 속성이 할당됩니다.

                  
<?php
class Person
{
    private $name;

    public function __construct()
    {
        $this->tell();
    }

    public function tell()
    {
        if (isset($this->name)) {
            echo "I am {$this->name}.\n";
        } else {
            echo "I don't have a name yet.\n";
        }
    }
}

$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Person');
$person = $sth->fetch();
$person->tell();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Person');
$person = $sth->fetch();
$person->tell();
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

I am Alice.
I am Alice.
I don't have a name yet.
I am Bob.
                

기타