2015-11-01 125 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); 
?>