PDOStatement::fetch
從結果集內擷取資料列。
語法
mixed PDOStatement::fetch ([ $fetch_style[, $cursor_orientation[, $cursor_offset]]] );
參數
$fetch_style:選擇性 (整數) 符號,用於指定資料列資料的格式。 如需 $fetch_style 的可能值清單,請參閱<備註>一節。 預設值為 PDO::FETCH_BOTH。提取方法中的 $fetch_style 會覆寫 PDO::query 方法中指定的 $fetch_style。
$cursor_orientation:選擇性 (整數) 符號,指出在準備陳述式指定 PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
時所要擷取的資料列。 如需 $cursor_orientation 的可能值清單,請參閱<備註>一節。 如需使用可捲動資料指標的範例,請參閱 PDO::prepare 。
$cursor_offset:選擇性 (整數) 符號,指定在 $cursor_orientation 為 PDO::FETCH_ORI_ABS 或 PDO::FETCH_ORI_REL,且 PDO::ATTR_CURSOR 為 PDO::CURSOR_SCROLL 時所要提取的資料列。
傳回值
傳回資料列或 false 的混合值。
備註
在呼叫提取時,資料指標會自動前進。 下表包含可能的 $fetch_style 值清單。
$fetch_style | 描述 |
---|---|
PDO::FETCH_ASSOC | 指定依資料行名稱編製索引的陣列。 |
PDO::FETCH_BOTH | 指定依資料行名稱且以 0 起始而編製索引的陣列。 此為預設值。 |
PDO::FETCH_BOUND | 會傳回 true,並指定 PDOStatement::bindColumn所指定的值。 |
PDO::FETCH_CLASS | 建立執行個體,並將資料行對應至具名屬性。 在呼叫提取之前呼叫 PDOStatement::setFetchMode 。 |
PDO::FETCH_INTO | 重新整理要求類別的執行個體。 在呼叫提取之前呼叫 PDOStatement::setFetchMode 。 |
PDO::FETCH_LAZY | 建立存取期間的變數名稱,並建立未命名的物件。 |
PDO::FETCH_NUM | 指定依照以 0 起始的資料行順序編製索引的陣列。 |
PDO::FETCH_OBJ | 以對應至資料行名稱的屬性名稱,指定未命名的物件。 |
如果資料指標位於結果集的結尾 (已擷取最後一個資料列,且資料指標已越過結果集界限),且資料指標是順向的 (PDO::ATTR_CURSOR = PDO::CURSOR_FWDONLY),後續的提取呼叫將會失敗。
如果資料指標是可捲動的 (PDO::ATTR_CURSOR = PDO::CURSOR_SCROLL),則提取會在結果集界限內移動資料指標。 下表包含可能的 $cursor_orientation 值清單。
$cursor_orientation | 描述 |
---|---|
PDO::FETCH_ORI_NEXT | 擷取下一個資料列。 此為預設值。 |
PDO::FETCH_ORI_PRIOR | 擷取上一個資料列。 |
PDO::FETCH_ORI_FIRST | 擷取第一個資料列。 |
PDO::FETCH_ORI_LAST | 擷取最後一個資料列。 |
PDO::FETCH_ORI_ABS, num | 依資料列號碼擷取在 $cursor_offset 中要求的資料列。 |
PDO::FETCH_ORI_REL, num | 依目前位置的相對位置,擷取在 $cursor_offset 中要求的資料列。 |
如果為 $cursor_offset 或 $cursor_orientation 所指定的值導致位置超出結果集界限,則提取將會失敗。
PDO 支援已新增至適用於 SQL Server 的 Microsoft Drivers for PHP 2.0 版。
範例
<?php
$server = "(local)";
$database = "AdventureWorks";
$conn = new PDO( "sqlsrv:server=$server ; Database = $database", "", "");
print( "\n---------- PDO::FETCH_CLASS -------------\n" );
$stmt = $conn->query( "select * from HumanResources.Department order by GroupName" );
class cc {
function __construct( $arg ) {
echo "$arg";
}
function __toString() {
return $this->DepartmentID . "; " . $this->Name . "; " . $this->GroupName;
}
}
$stmt->setFetchMode(PDO::FETCH_CLASS, 'cc', array( "arg1 " ));
while ( $row = $stmt->fetch(PDO::FETCH_CLASS)) {
print($row . "\n");
}
print( "\n---------- PDO::FETCH_INTO -------------\n" );
$stmt = $conn->query( "select * from HumanResources.Department order by GroupName" );
$c_obj = new cc( '' );
$stmt->setFetchMode(PDO::FETCH_INTO, $c_obj);
while ( $row = $stmt->fetch(PDO::FETCH_INTO)) {
echo "$c_obj\n";
}
print( "\n---------- PDO::FETCH_ASSOC -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_ASSOC );
print_r( $result );
print( "\n---------- PDO::FETCH_NUM -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_NUM );
print_r ($result );
print( "\n---------- PDO::FETCH_BOTH -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_BOTH );
print_r( $result );
print( "\n---------- PDO::FETCH_LAZY -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_LAZY );
print_r( $result );
print( "\n---------- PDO::FETCH_OBJ -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_OBJ );
print $result->Name;
print( "\n \n" );
print( "\n---------- PDO::FETCH_BOUND -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$stmt->bindColumn('Name', $name);
$result = $stmt->fetch( PDO::FETCH_BOUND );
print $name;
print( "\n \n" );
?>