sqlsrv_fetch_array

(没有版本信息可用,可能只在 Git 中)

sqlsrv_fetch_array将一行作为数组返回

说明

sqlsrv_fetch_array(
    资源 $stmt,
    整型 $fetchType = ?,
    整型 $row = ?,
    整型 $offset = ?
): 数组

将下一行可用的数据作为关联数组、数字数组或两者(默认值)返回。

参数

stmt

由 sqlsrv_query 或 sqlsrv_prepare 返回的语句资源。

fetchType

一个预定义常量,指定要返回的数组类型。可能的值是 SQLSRV_FETCH_ASSOCSQLSRV_FETCH_NUMERICSQLSRV_FETCH_BOTH(默认值)。

当使用多个同名列的结果集时,不应使用 SQLSRV_FETCH_ASSOC 的获取类型。

row

指定在使用可滚动游标的结果集中访问的行。可能的值是 SQLSRV_SCROLL_NEXTSQLSRV_SCROLL_PRIORSQLSRV_SCROLL_FIRSTSQLSRV_SCROLL_LASTSQLSRV_SCROLL_ABSOLUTESQLSRV_SCROLL_RELATIVE(默认值)。当指定此参数时,必须显式定义 fetchType

offset

如果行参数设置为 SQLSRV_SCROLL_ABSOLUTESQLSRV_SCROLL_RELATIVE,则指定要访问的行。请注意,结果集中的第一行索引为 0。

返回值

成功时返回数组,如果不再有行要返回,则返回 null,如果发生错误,则返回 false

示例

示例 #1 检索关联数组。

<?php
$serverName
= "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if(
$conn === false ) {
die(
print_r( sqlsrv_errors(), true));
}

$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );
if(
$stmt === false) {
die(
print_r( sqlsrv_errors(), true) );
}

while(
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
echo
$row['LastName'].", ".$row['FirstName']."<br />";
}

sqlsrv_free_stmt( $stmt);
?>

示例 #2 检索数字数组。

<?php
$serverName
= "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if(
$conn === false ) {
die(
print_r( sqlsrv_errors(), true));
}

$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );
if(
$stmt === false) {
die(
print_r( sqlsrv_errors(), true) );
}

while(
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {
echo
$row[0].", ".$row[1]."<br />";
}

sqlsrv_free_stmt( $stmt);
?>

注释

在上例中,未指定 fetchType 或显式使用 SQLSRV_FETCH_TYPE 常量将返回一个包含关联键和数字键的数组。

如果返回了多个同名列,则最后一个列将优先。为了避免字段名称冲突,请使用别名。

如果返回了一个没有名称的列,则数组元素的关联键将是一个空字符串 ("")。

参见

添加注释

用户贡献的注释 3 个注释

albornozg dot rene at gmail dot com
5 年前
使用迭代的示例 ( SQLSRV_SCROLL_ABSOLUTE )。

for ($i=0; $i < sqlsrv_num_rows($stmt); $i++) {

$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC, SQLSRV_SCROLL_ABSOLUTE , $i );
echo "第 1 列的值: '.trim($row[0]).', 第 2 列的值: '.trim($row[1]);

}
dlyasaitov184 at yandex dot ru
7 年前
当我尝试对“select ... from [viewName]”语句使用 SQLSRV_FETCH_BOTH 时,结果集包含多余的字段(重复字段和来自联接表的其他字段)。其他类型的 fetchType 则可以正常工作。
匿名
10 年前
请注意,尽管文档中说在处理包含多个同名字段的结果集时应避免使用 SQLSRV_FETCH_ASSOC,但在某些情况下这样做是完全有效的。

请考虑以下查询

SELECT * FROM a INNER JOIN b ON a.id = b.id

对于任何行,如果您使用 NUMERIC 获取,您将得到 a.id 和 b.id 的字段,这可能不是很有用。

如果您使用 ASSOC 获取,您将得到一个名为“id”的字段,并且考虑到它在两个表中始终相同(因为您的查询要求它是这样),您不会有丢失任何数据的风险。

如果您是根据未知数量的字段生成输出,则 ASSOC 行为可能更可取。
To Top