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 结果指定的值位于结果集边界之外的某个位置,提取将失败。
已在 Microsoft Drivers for PHP for SQL Server的版本 2.0 中添加了对 PDO 的支持。
示例
<?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" );
?>