2015-11-01 65 views
2

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

感谢

+0

可能您的查询失败。因为你根本没有做任何错误检测/处理,所以你一味地假设你实际上是拥有对象,但情况可能并非如此。我建议你看看你的错误日志文件来了解原因。 – arkascha

+0

@arkascha查询不会失败。我可以用'$ obj-> ColName'获取值。 –

+0

你试过'var_dump($ arr);'while循环之后?它输出任何东西吗? – Jan

回答

0

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

首先检查文件编码。在我的情况下,我的文档由ANSI编码的Notepad ++保存。我用记事本打开它并将编码更改为UTF8。

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

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

我发现它here

谢谢大家。

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); 
?>