我是一名.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。一切都像一个符咒。
我在这里找到了
谢谢大家。