2017-05-26 100 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); 

我无法测试脚本,但它必须解决您的问题。