Php 在MS SQL Server查询后返回JSON

Php 在MS SQL Server查询后返回JSON,php,sql,sql-server,sql-server-2008-r2,sqlsrv,Php,Sql,Sql Server,Sql Server 2008 R2,Sqlsrv,我试图将MS SQL Server查询的结果作为JSON对象返回 查询是正确的,我还可以通过echo$row['name']查看结果,但通过echo json\u encode($arr)我没有得到任何结果。这一页还是空的 这是我的代码: $sql = "SELECT * FROM tab1"; $stmt = sqlsrv_query ( $conn, $sql ); if ($stmt === false) { die ( print_r ( sqlsrv_

我试图将MS SQL Server查询的结果作为JSON对象返回

查询是正确的,我还可以通过
echo$row['name']
查看结果,但通过
echo json\u encode($arr)
我没有得到任何结果。这一页还是空的

这是我的代码:

$sql = "SELECT * FROM tab1";

    $stmt = sqlsrv_query ( $conn, $sql );
    if ($stmt === false) {
        die ( print_r ( sqlsrv_errors (), true ) );
    }

    $arr = array ();
    while ( $row = sqlsrv_fetch_array ( $stmt ) ) {
        // echo $row ['name'] . "\n";  // <- this works
        array_push ( $arr, $row );
    }

    echo json_encode ( $arr );

    sqlsrv_free_stmt ( $stmt );
    sqlsrv_close ( $conn );

    header ( "Content-type: application/json; charset=utf-8" );
    die ( json_encode ( $arr ) );
    exit ();
$sql=“从表1中选择*”;
$stmt=sqlsrv_查询($conn,$sql);
如果($stmt==false){
die(print_r(sqlsrv_errors(),true));
}
$arr=array();
while($row=sqlsrv\u fetch\u数组($stmt)){

//echo$row['name']。“\n”//将头放在json_编码之前

  header ( "Content-type: application/json;" );
  echo json_encode ( $arr );

接收页面示例中的错误报告。在AJAX的jQuery脚本中,我将包括如下控制台错误报告:

                .fail(function( jqxhr, textStatus, error ) {
                    console.log(arguments);
                    var err = textStatus + ", " + error;
                    console.log( "Request Failed: " + err );
            });
要在浏览器中查看该控制台,我经常使用“开发人员工具”在Chrome或类似软件中使用windows。这对于调试通信中的基本错误是非常宝贵的。如果您无法返回预期的内容,这种向控制台报告的方式会有所帮助。JSON与Javascript的其他方式一样挑剔。它通常会打破沉默

同样,要显示返回的成功数据,您可以通过通用警报框进行报告:

                    success: function (data){
                        alert(data+" was received."); 
                    },
VAR.DUMP,并运行该页;将结果与JONE的成功和失败进行比较。使用这些类型的成功和失败例程,您应该查看空白页上是否以及返回的内容。
我注意到的另一个变化是,我通常只以echo json编码行结束;除非您对最后一位建立一些流控制并将其放入自己的块中,否则可能以该行结束。

头必须发送到输出。检查已安装的扩展(需要php5 json)。 启用错误报告:

error_reporting(E_ALL);

好的,我终于找到了答案。问题是表中的特殊字符

只需将
characterSet
添加到
connectionInfo
中即可帮助:

$connectionInfo = array (
        "Database" => "myDB",
        "CharacterSet" => "UTF-8"
);

谢谢,但在我的情况下,它没有改变任何东西。那么数组推送呢?尝试推送$row['name']不只是行?事实上,你不是在数组中放入一个数组吗?大多数JSON将解析一个一级的键/值对字符串。是的,但不幸的是,没有任何更改。当我对JSON进行故障排除时,我经常使用另一个普通PHP程序来调用脚本。当我看到加载到JSON命令中的值在独立运行时,我会使用接下来,我将继续讨论JSON。这是我为您准备的最好的了。祝您好运。heeu这与标头无关,但您的建议错误报告仍然是调试问题的好主意。您应该将echo JSON_encode($arr);移到标头(…)之后,并删除行die(…)而不使用。您可以使用
error_log(JSON_encode)记录数组输出吗($arr));
就在
echo
之前?@alalp:不管我怎么做,如果没有错误,比如在这种情况下,我总是得到一个空页面。我指的是日志文件,而不是页面。你可以使用
error\u log()
方法记录许多事情。我们应该了解问题是与数组有关还是与头定义等其他问题有关。