You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中sqlsrv_fetch_array()仅返回列名,如何获取行数据?

问题解决:SQLSRV查询无法获取全部1000条数据

问题根源

你的代码存在两个核心问题:

  1. $row2 = sqlsrv_fetch_array($stmt2);仅执行了一次,只会从结果集中取出第一行数据,因此$row2只是单条记录的数组,仅包含你SELECT的4列,访问索引4自然会报未定义键的错误。
  2. 后续的for循环仅处理了这一行的部分列,完全没有遍历查询到的1000条数据。

修正方案

需要通过**循环调用sqlsrv_fetch_array**来遍历整个结果集,直到函数返回false(表示无更多数据)。推荐使用关联数组模式(SQLSRV_FETCH_ASSOC),通过列名访问数据更直观,避免索引混淆。

修正后的代码

/*Test SQL command*/
$tsql2 = "SELECT TOP (1000) [TABLE_CATALOG]
  ,[TABLE_SCHEMA]
  ,[TABLE_NAME]
  ,[TABLE_TYPE]
FROM [History].[INFORMATION_SCHEMA].[TABLES]";

$stmt2 = sqlsrv_query( $conn, $tsql2);  
if( $stmt2 === false )  
{  
    echo "Error in executing query.</br>";  
    die( print_r( sqlsrv_errors(), true));  
}  

/* 循环获取所有行并展示 */  
// 使用SQLSRV_FETCH_ASSOC获取关联数组,通过列名访问更清晰
while( $row2 = sqlsrv_fetch_array( $stmt2, SQLSRV_FETCH_ASSOC)) {   
    echo "TABLE_CATALOG: " . $row2['TABLE_CATALOG'] . "\t";
    echo "TABLE_SCHEMA: " . $row2['TABLE_SCHEMA'] . "\t";
    echo "TABLE_NAME: " . $row2['TABLE_NAME'] . "\t";
    echo "TABLE_TYPE: " . $row2['TABLE_TYPE'] . "<br/>";
}

/* 释放资源 */  
sqlsrv_free_stmt( $stmt2); 

可选扩展:一次性存储所有数据

如果需要把1000条数据存入数组后续使用,可以这样做:

$allData = [];
while( $row2 = sqlsrv_fetch_array( $stmt2, SQLSRV_FETCH_ASSOC)) {
    $allData[] = $row2;
}
// 后续可通过$allData数组访问所有1000条记录

内容的提问来源于stack exchange,提问作者Mich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:18:31