当结果集只有一行时,SQL Server 和 PHP sqlsrv_fetch_array 返回 null

Posted

技术标签:

【中文标题】当结果集只有一行时,SQL Server 和 PHP sqlsrv_fetch_array 返回 null【英文标题】:SQL Server & PHP sqlsrv_fetch_array returns null when result set has only one row 【发布时间】:2018-03-16 20:23:54 【问题描述】:

我正在尝试从 php 中的 sql server 获取数据。 我的代码是这样的:

$conn = "...";
$sql = "SELECT A.* FROM A 
        LEFT JOIN B ON A.id = B.id
        WHERE A.First_Name = 'Mary'";
$stmt = sqlsrv_query($conn, $sql);
if( sqlsrv_fetch($stmt) === false) 
     die( print_r( sqlsrv_errors(), true));

while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) 
   echo $row['Last_Name'];

当结果集中只有一行时,返回null。但我可以使用 sqlsrv_get_field 得到结果。是什么原因?

【问题讨论】:

【参考方案1】:

这个:

if( sqlsrv_fetch($stmt) === false) 
     die( print_r( sqlsrv_errors(), true));

获取一行。之后,在 while 循环中没有更多行可以获取。

相反,删除 fetch 调用并仅评估 $stmt。如果查询失败则为假。

if($stmt === false) 
     die( print_r( sqlsrv_errors(), true));

【讨论】:

以上是关于当结果集只有一行时,SQL Server 和 PHP sqlsrv_fetch_array 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

使用 sql server 从 jdbc 中的结果集中转到最后一行

sql server 2008 NULL值

sqlserver 游标都有哪些属性

SQL Server - 基于百分比的全文搜索

C#操作SQL Server数据库

Oracle:根据结果集计数更新行