使用列名从MySQL返回JSON

时间:2016-07-18 12:56:44

标签: php mysql arrays json

我使用PHP从MySQL获取一行,然后使用以下代码将其编码为JSON

$jsonData = array();
if(mysqli_num_rows($result) > 0){
while ($array = mysqli_fetch_row($result)) {
    $jsonData[] = $array;
}
$json = json_encode($jsonData);
echo stripslashes($json);
}`

但是,我只得到行值。我想要行值和它们的列名。目前它返回以下JSON。

[["shekhar","Shekhar Chatterjee","https://graph.facebook.com/1254850974526564/picture","0"]],[["shek","Shekhar Chatterjee","","0"]]

我想得到以下输出:

[{
  "user":"shekhar",
  "name":"Shekhar Chatterjee",
  "url":"https://graph.facebook.com/1254850974526564/picture",
  "stat":"0"
 },{
  "user":"shekhar",
  "name":"Shekhar Chatterjee",
  "url":"https://graph.facebook.com/1254850974526564/picture",
  "stat":"0"
}]

5 个答案:

答案 0 :(得分:7)

使用mysqli_fetch_assoc()

你去吧

$jsonData = array();
if(mysqli_num_rows($result) > 0){
while ($array = mysqli_fetch_assoc($result)) {
    $jsonData[] = $array;
}
$json = json_encode($jsonData);
echo stripslashes($json);
}

答案 1 :(得分:4)

您应该尝试{{1}}。

它应该返回带有相应字段名的结果。

您可以找到手册页here

答案 2 :(得分:2)

您应该在此使用mysqli_fetch_assoc,以便它返回键作为列名。 mysqli_fetch_row返回数字数组键。

试试这个:

if (mysqli_num_rows($result) > 0) {
   $jsonData[] =  mysqli_fetch_assoc($result);
}
$json = json_encode($jsonData, JSON_PRETTY_PRINT);

答案 3 :(得分:1)

只需注意,您不需要执行额外的addslashes(),您可以添加JSON_UNESCAPED_SLASHES作为json_encode()的第二个参数。

echo json_encode($jsonData, JSON_UNESCAPED_SLASHES);

答案 4 :(得分:0)

如果其他人在2018年遇到这种情况,这就是完整的例子。

<?php

header("Content-Type: application/json; charset=UTF-8");

$conn = new mysqli("host", "user", "password", "db_name");
$result = $conn->query("SELECT * FROM my_table");
$jsonData = array();
if(mysqli_num_rows($result) > 0){
while ($array = mysqli_fetch_assoc($result)) {
    $jsonData[] = $array;
}
$json = '{"my_data":';
$json .= json_encode($jsonData);
$json .= '}';
echo stripslashes($json);
}

?>

...