PDOStatement::fetch — 從結果集中取得下一行(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
從一個PDOStatement 物件相關的結果集中取得下一行。 fetch_style 參數決定POD 如何回傳行。
fetch_style
控制下一行如何回傳給呼叫者。此值必須是PDO::FETCH_* 系列常數中的一個,缺省為PDO::ATTR_DEFAULT_FETCH_MODE 的值(預設為PDO::FETCH_BOTH )。
PDO::FETCH_ASSOC :傳回索引為結果集列名的陣列
PDO::FETCH_BOTH (預設):傳回索引為結果集列名和以0開始的列號的陣列
PDO::FETCH_BOUND :傳回TRUE
,並指派結果集中的列值給PDOStatement::bindColumn() 方法綁定的PHP 變數。
PDO::FETCH_CLASS :傳回一個請求類別的新實例,映射結果集中的列名到類別中對應的屬性名稱。如果fetch_style
包含PDO::FETCH_CLASSTYPE(例如: PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE ),則類別名稱由第一列的值決定
PDO::FETCH_INTO :更新一個被請求類別已存在的實例,映射結果集中的列到類別中命名的屬性
PDO::FETCH_LAZY :結合使用PDO::FETCH_BOTH和PDO::FETCH_OBJ ,建立供用來存取的物件變數名
PDO::FETCH_NUM :傳回索引為以0開始的結果集列號的陣列
PDO::FETCH_OBJ :傳回一個屬性名稱對應結果集列名的匿名對象
cursor_orientation對於一個由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 。
<?php$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 運用PDOStatement::fetch 風格*/print("PDO::FETCH_ASSOC: ") ;print("Return next row as an array indexed by column namen");$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 numbern");$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 propertiesn");$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 propertiesn");$result = $sth->fetch(PDO::FETCH_OBJ);print $result->NAME;print("n");?>
以上實例會輸出:
PDO::FETCH_ASSOC: Return next row as an array indexed by column nameArray( [NAME] => apple [COLOUR] => red)PDO::FETCH_BOTH: Return next row as an array indexed by both and column name and noth ] => banana [0] => banana [COLOUR] => yellow [1] => yellow)PDO::FETCH_LAZY: Return next row as an anonymous object with column names as propertiesPDORow Object( [NAME] => orange [COLOUR] => orange)PDOFE_TCH_TCH_TCH Return next row as an anonymous object with column names as propertieskiwi
<?phpfunction readDataForwards($dbh) { $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET'; try { $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql, array(PDO::ATTR_CURSOR => Pdbh->prepare($sql) :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; } $stmt = null; } catch (PDOException $e) { print $e->getMessage(); }}function readDataBackwards($dbh) { $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet'; try { $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PROCURSOR_SCDO::CURSOR_SCDO::CURSOR_SCDO::CURSOR_SCDO::CURSOR_SCDO) ); $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)); $stmt = null; } catch (PDOException $e) { print $e->getMessage(); }}print "Reading forwards:n";readDataForwards($conn);print "Reading backwards:n";readDataBackwards($conn);print "Reading backwards:n";readDataBackwards( $conn);?>
以上實例會輸出:
Reading forwards:21 10 516 0 519 20 10Reading backwards:19 20 1016 0 521 10 5