无法从我从PHP脚本到Json的输出中编码数组

时间:2017-05-26 14:16:50

标签: php mysql arrays json

我有一个名为'plan_test'的MySQL数据库,其中包含名为(5a,5b,5c ...)的表。这些表具有相同的列和多行。我已经设置了一个具有权限的用户来完成数据库的所有操作。这是我的php代码,它应该返回一个json格式的String,我稍后可以阅读:

<?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 String?

顺便说一下,来自'Bemerkung'的未定义字符串应该就在那里。

4 个答案:

答案 0 :(得分:0)

您从未将$response设置为编码版本,echo$response的编码版本。这就是var_dump()显示数组的原因。

要输出实际的JSON,您必须添加相应的Content-Type标题:

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

答案 1 :(得分:0)

这是一个格式错误的UTF-8字符.. thx @Vatev

答案 2 :(得分:0)

你正在使用mysqli_fetch_array函数,你可以从他的名字猜测这个函数将返回一个PHP数组;)

您需要将PHP数组转换为json字符串json_encode 功能将为你完成这项工作。

从你的php中你需要添加标题content-type: application/json以在返回给客户端的响应中指定正文在json中。有了它,客户端浏览器将能够正确读取数据。

第三行Bemerkung列的数据库值是多少?我认为这是一种口音或者某种东西,你可能有编码问题

答案 3 :(得分: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);

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