【发布时间】:2016-08-25 19:33:45
【问题描述】:
我的 php 代码如下所示:
$header = "Content-Type: application/json";
header($header);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * ...";
$result = $conn->query($sql);
$array_1 = array();
if ($result->num_rows > 0) {
// output data as array
while($row = $result->fetch_assoc()) {
array_push($array_1, $row);
}
}
$conn->close();
print_r($array_1);
这给了我以下输出:
Array
(
[0] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Abonnement
)
[1] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Verlängerung
)
)
此输出是通过电子邮件查询的结果,以返回产品名称。在这种情况下,如果我将print_r 更改为echo json_encode,则不会出现任何内容。这让我相信问题与字符集有关,因为结果不是空的,所以我补充说:
$header = "Content-Type: application/json; charset=utf-8";
header($header);
仍然没有运气。我一直在阅读,可能是 json* 函数被禁用的情况,但是,如果我从我的查询中更改电子邮件,它使用print_r 和使用echo json_encode 的json 显示结果非常好。问题的根源,或者任何类似的情况,一定是这个结果的根源。可能是因为结果中的字符 ä 吗?这就是我在标题中添加 utf-8 的原因。
正如我上面所说,如果我更改电子邮件它可以工作,但是当我使用“test@gmail.com”时它只显示 1 个结果而不是 2 个。会不会是结果没有正确放入数组?我认为print_r 不会正确格式化查询结果。
有人知道怎么回事吗?
【问题讨论】:
-
var_dump($array_1)的输出是什么? var_dump 总是对调试更有帮助;) -
试试
$json_string = json_encode($array_1); var_dump($json_string); -
两者都做,var_dump($array);然后回显 json_encode($array);没有理由它不起作用。如果函数不存在,您会收到警告/错误,您正在使用该函数不存在。确保使用 error_reporting(E_ALL); 显示所有警告;
-
问
json_last_error。是的,主要是编码问题。 -
在
var_dump($json_string)我得到 bool(false) @Fabian N @Brian @Loenix