Проблема с сохранением подготовленного результата оператора в массиве json - PullRequest
0 голосов
/ 24 января 2019

Я хотел сохранить результаты из подготовленного оператора в массив, а затем преобразовать в 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 голосов
/ 24 января 2019

Ваше добавление к результату в неправильном порядке, но, поскольку вы выбираете только нужные столбцы, вы можете сократить это до значения fetch_all(), которое будет извлекать все данные без необходимости цикла ...

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

Если вы хотите, чтобы столбцы имели другое имя в массиве, используйте псевдоним в SQL для установки имени.

0 голосов
/ 24 января 2019

Чтобы получить json в нужном формате, каждая строка из базы данных должна быть записана в выходной json - создайте массив и добавьте к нему в цикле

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