【发布时间】:2016-03-13 23:45:42
【问题描述】:
这是我的功能:
<?php
function getResults($query) {
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$conn->set_charset("utf8");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$result = $conn->query($query);
if ($result) {
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
return $rows;
} else {
return mysqli_error($conn);
}
}
?>
我在这里使用它:
if ($_POST["action"] == "getCitiesByState") {
$cities = getResults("SELECT * FROM tbl_cidades WHERE estado_id = ".$_POST["state_id"]);
echo json_encode($cities, JSON_UNESCAPED_UNICODE);
die();
}
它输出:
{id: "8853", estado_id: "26", nome: "Adamantina", cep: "17800000", loc_no_abrev: "Adamantina"},…]
id、estado_id、nome 等均未加引号,构成无效的 JSON 数据。如何将它们作为字符串返回,以便它们成为有效的 JSON?
这是var_dump($cities)的输出示例
array(1) { [0]=> array(5) { ["id"]=> string(4) "1778" ["estado_id"]=> string(1) "7" ["nome"]=> string(9) "Brasília" ["cep"]=> string(0) "" ["loc_no_abrev"]=> string(9) "Brasília" } }
【问题讨论】:
-
您使用的是什么版本的 PHP?我无法复制这种行为。您是否尝试过使用普通数组手动执行此操作?
-
我无法将其复制到。尝试打印类似 json_encode(['id'=>15, 'name'=>'john snow'], JSON_PRETTY_PRINT);
-
您的示例有效,而且奇怪的是,在我使用您的示例之后,其他 echo 打印也带有引号。这没有道理。版本为:PHP/5.6.14
-
它必须与unicode相关一如既往,因为整个数据都是UTF8,JSON不喜欢它(葡萄牙字符)。
-
数据库列名不太可能有问题...您可以对
$cities数组进行var_dump()并将其添加到问题中吗?