管理对象数组

时间:2015-11-01 10:05:05

标签: php

我是.NET开发人员,最近我开始学习php。我想用php来创建基本的API。但是,我真的找不到合适的方法。

所以这是我的示例代码

<?php
header('Access-Control-Allow-Origin: *');
$conn = sqlsrv_connect( "ip", array("Database"=>"dbnane", "UID"=>"uid", "PWD"=>"123456")) or die("Couldn't connect");
$arr = array();
if( $conn ) {
     $result = sqlsrv_query($conn, "SELECT * FROM Table");
     while( $obj = sqlsrv_fetch_object( $result )) {
         $arr[] = $obj;
     }
     echo json_encode($arr);
}
sqlsrv_close($conn);
?>

我想把行放在一个数组中,作为一个对象并将该数组编码为json。但是,这没有任何打印,我没有任何错误。我究竟做错了什么 ? 换句话说,我可能会为请求的表创建一个数据传输对象/类,并将其放入数组中。这可能会有效,但这种方法,如果可行,看起来更有活力和干净。

编辑:只是为了说清楚,查询不会失败。我可以用

打印出值
         while( $obj = sqlsrv_fetch_object( $result )) {
              echo $obj->ColName ."<br/>";
        }

由于

2 个答案:

答案 0 :(得分:0)

答案非常简单,如果您声称查询正在生成输出,那么您实际回显的最后一件事可能不是json_encode()所以移动的结果,这是您退出之前做的最后一件事

<?php
    header('Access-Control-Allow-Origin: *');
    $conn = sqlsrv_connect( "ip", array("Database"=>"dbnane", "UID"=>"uid", "PWD"=>"123456")) or die("Couldn't connect");
    $arr = array();
    if( $conn ) {
         $result = sqlsrv_query($conn, "SELECT * FROM Table");
         while( $obj = sqlsrv_fetch_object( $result )) {
             $arr[] = $obj;
         }
    }
    sqlsrv_close($conn);
    echo json_encode($arr);
?>

答案 1 :(得分:0)

我已经解决了我的问题。问题是我的对象的成员之一,即UTF8字符串不被json_encode();识别为UTF8。在这种情况下,你应该看两件事。

首先,检查文档编码。就我而言,我的文档由Notepad ++保存,用ANSI编码。我用记事本打开它并将编码更改为UTF8,我已经改变了。

其次,我使用了json_encode()一个额外参数,可用于PHP 5.4及以上版本,JSON_UNESCAPED_UNICODE。所以我像json_encode($arr,JSON_UNESCAPED_UNICODE)一样使用它。

和poof。一切都像魅力一样。

我发现了here

谢谢大家。