管理对象数组


Managing object arrays

我是一名.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/>";
        }

感谢

答案很简单,如果您声称查询正在产生输出,那么您实际回显的最后一件事可能不是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);
?>

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

首先,检查文档编码。在我的例子中,我的文档是用ANSI编码的Notepad++保存的。我已经改变了这一点,用记事本打开它,并将编码改为UTF8。

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

和poof。一切都像一个符咒。

我在这里找到了

谢谢大家。