首页 > 解决方案 > 使用php将sql server数据转换为json

问题描述

我的 json 代码没有显示任何内容,我已经尝试了很多代码,但没有任何帮助。

include('connect.php');
$sql = "SELECT *  FROM items";  
$stmt = sqlsrv_query( $conn, $sql);

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))  //this loop is working
{    
  echo $row['item_id'].", ".$row['item_name'].", ".$row['Barcode']."<br>"; 
}

$json = array();
do {
   while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
     $json[] = $row;
   }
} while ( sqlsrv_next_result($stmt) );

echo json_encode($json);  //empty?!
sqlsrv_free_stmt( $stmt);

标签: phpsqljsonsql-serversqlsrv

解决方案


这有很多可能的问题:

1)您是否检查过您的查询实际上返回了行?

2)您将数据循环两次(两个while( $row = sqlsrv_fetch_array...循环),这既无用也无效率。

3)the do...while ( sqlsrv_next_result($stmt) );子句也应该是不必要的,因为 fetch_array 会知道它什么时候到达数据的末尾,而且你只有一个结果集,所以你不需要在它们之间移动

4)您正在回显原始数据以及 JSON,因此如果您对此脚本进行 ajax 调用,它将失败,因为响应将部分包含非 JSON 数据

我认为这足以为您提供一些明智的数据:

include('connect.php');
$sql = "SELECT *  FROM items";  
$stmt = sqlsrv_query( $conn, $sql);

if( $stmt === false)
{
   echo "Error in query preparation/execution.\n";  
   die( print_r( sqlsrv_errors(), true));  
}

$json = array();

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{    
     $json[] = $row;
}

echo json_encode($json);

推荐阅读