Php 在MS SQL Server查询后返回JSON
我试图将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_
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()
方法记录许多事情。我们应该了解问题是与数组有关还是与头定义等其他问题有关。