2017-05-26 28 views
-1

我有一個名爲'plan_test'的MySQL數據庫,其中包含名爲(5a,5b,5c ...)的表。這些表具有相同的列和多行。我已經設置了一個擁有權限的用戶來完成數據庫的所有工作。這裏是我的PHP代碼,它應該返回一個JSON格式化字符串,我可以讀以後:不能編碼我從PHP腳本得到的輸出數組到Json

<?php 
$servername = "localhost"; 
$username = "tester"; 
$password = "abc123"; 
$dbname = "plan_test"; 

$sql = "select * from plan_test.5a"; 

$con = mysqli_connect($servername,$username,$password,$dbname); 
mysqli_set_charset($con,"utf-8"); 
$result = mysqli_query($con,$sql); 

$response = array(); 

while($row = mysqli_fetch_array($result)){ 

    array_push($response,array("Klasse"=>$row[0],"Tag"=>$row[4],"Monat"=>$row[5],"Stundenanfang"=>$row[7],"Stundenende"=>$row[8],"Art"=>$row[9],"Fach"=>$row[10],"Lehrer"=>$row[11],"sFach"=>$row[12],"sLehrer"=>$row[13],"Raum"=>$row[14],"Bemerkung"=>$row[15])); 

} 
echo json_encode(array("test"=>$response)); 

mysqli_close($con); 

?> 

我得到一個空白網站出來的,當我運行

var_dump($response); 

我得到這個:

array(3) { 
    [0]=> 
    array(12) { 
    ["Klasse"]=> 
    string(2) "5a" 
    ["Tag"]=> 
    string(2) "19" 
    ["Monat"]=> 
    string(1) "5" 
    ["Stundenanfang"]=> 
    string(1) "1" 
    ["Stundenende"]=> 
    string(1) "2" 
    ["Art"]=> 
    string(10) "Vertretung" 
    ["Fach"]=> 
    string(1) "E" 
    ["Lehrer"]=> 
    string(2) "VH" 
    ["sFach"]=> 
    string(1) "E" 
    ["sLehrer"]=> 
    string(2) "AL" 
    ["Raum"]=> 
    string(3) "113" 
    ["Bemerkung"]=> 
    string(1) "�" 
    } 
    [1]=> 
    array(12) { 
    ["Klasse"]=> 
    string(2) "5a" 
    ["Tag"]=> 
    string(2) "19" 
    ["Monat"]=> 
    string(1) "5" 
    ["Stundenanfang"]=> 
    string(1) "3" 
    ["Stundenende"]=> 
    string(1) "4" 
    ["Art"]=> 
    string(10) "Vertretung" 
    ["Fach"]=> 
    string(4) "SCHW" 
    ["Lehrer"]=> 
    string(2) "WE" 
    ["sFach"]=> 
    string(4) "SCHW" 
    ["sLehrer"]=> 
    string(2) "TO" 
    ["Raum"]=> 
    string(3) "AH2" 
    ["Bemerkung"]=> 
    string(1) "�" 
    } 
    [2]=> 
    array(12) { 
    ["Klasse"]=> 
    string(2) "5a" 
    ["Tag"]=> 
    string(2) "19" 
    ["Monat"]=> 
    string(1) "5" 
    ["Stundenanfang"]=> 
    string(1) "3" 
    ["Stundenende"]=> 
    string(1) "4" 
    ["Art"]=> 
    string(10) "Vertretung" 
    ["Fach"]=> 
    string(4) "SCHW" 
    ["Lehrer"]=> 
    string(2) "RR" 
    ["sFach"]=> 
    string(4) "SCHW" 
    ["sLehrer"]=> 
    string(2) "WI" 
    ["Raum"]=> 
    string(3) "AH1" 
    ["Bemerkung"]=> 
    string(1) "�" 
    } 
} 

由於某種原因,這個數組沒有被編碼爲json格式。 如何將此數組編碼爲json字符串?

順便說一句,從'Bemerkung'的未定義的字符串是爲了在那裏。

+0

echo $ json = json_encode($ response); ? – Blueline

+0

其中'var_dump()'? –

+0

@Blueline nope .. – erri120

回答

0

您從未將$response設置爲編碼版本,您的echo編碼版本爲$response。這就是爲什麼var_dump()顯示一個數組。

並輸出實際JSON你必須添加相應的Content-Type頭:

header('Content-Type: application/json'); 
echo json_encode(array("test"=>$response)); 
+0

不是解決方案,但仍然有用thx。 – erri120

0

這是一個畸形的UTF-8字符.. THX @Vatev

0

您正在使用mysqli_fetch_array函數,你可以從他的名字猜測這個函數會返回一個PHP數組;)

你需要將你的PHP數組轉換成json字符串,json_encode 函數會做爲你工作。

從你的PHP你需要添加標頭content-type: application/json指定在返回給客戶端的響應身體是在JSON。由此客戶端瀏覽器將能夠正確讀取數據。

第三行的Bemerkung列的數據庫的值是多少?我認爲這是一個口音或東西,你也許有一個編碼問題

0

我認爲,你必須使用mysqli_fetch_all()這樣。

$servername = "localhost"; 
$username = "tester"; 
$password = "abc123"; 
$dbname = "plan_test"; 

$sql = "select * from plan_test.5a"; 

$con = mysqli_connect($servername,$username,$password,$dbname); 
mysqli_set_charset($con,"utf-8"); 
$result = mysqli_query($con,$sql); 

$response = mysqli_fetch_all(); 

echo json_encode($response); 

mysqli_close($con); 

我無法測試腳本,但它必須解決您的問題。