我有一个名为'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'的未定义字符串应该就在那里。
答案 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);
我无法测试脚本,但它必须解决您的问题。