将准备好的语句结果存储到json数组中时出现问题

时间:2019-01-24 09:21:00

标签: php json multidimensional-array associative-array

我想将准备好的语句的结果存储到数组中,然后转换为json。但是我没有得到我想要的json所需的格式。

 $stmt = $conn->prepare("select course_id,course_name from mas_course");
$stmt->execute();

$stmt->store_result();
$stmt->bind_result($courseid, $coursename); 
$cnt = $stmt->num_rows;

$myObj = array();

 while ($stmt->fetch()) {
        $myObj['courseid'][] = $courseid;
        $myObj['coursename'][] = $coursename;
    }

$myJSON = json_encode($myObj);
    echo $myJSON;

它给了我类似

的输出
{
"id": ["123", "345"],
"name": ["abc", "xyz"]
}

但是我想要

[{
    "id": "123",
    "name": "abc"
},
{
    "id": "345",
    "name": "xyz"
}]

2 个答案:

答案 0 :(得分:2)

要获得所需格式的json,数据库中的每一行都必须是输出json中的条目-创建一个数组并在循环中添加到其中

$output=[];
while( $stmt->fetch() ) $output[]=(object)array(
    'id'    =>  $courseid,
    'name'  =>  $coursename
);
$json=json_encode( $output );

答案 1 :(得分:2)

您以错误的顺序将结果添加到结果中,但是由于仅获取所需的列,因此可以缩短使用fetch_all()的时间,这将获取所有数据而无需循环... < / p>

$output = $stmt->fetch_all(MYSQLI_ASSOC);
$json=json_encode( $output );

如果您希望列在数组中具有不同的名称,请在SQL中使用别名来设置名称。