Лучший способ генерировать этот массив json из данных MySql с помощью php

Sql скрипка для вашего удобства здесь .

Я беру данные из таблицы MySql и превращаю их в json-массив. Все работает хорошо, и у меня есть выход так, как я хочу, но есть ли способ, которым это можно улучшить (сократить / улучшить)? Ключи массива должны оставаться одинаковыми и должны соответствовать выходу dbs.

Мой код

$stmt = $conn->prepare("select name as name, age as age, address as address, pincode as pincode from json where name = 'peter'"); $stmt->execute(); while( $row = $stmt->fetch() ) { #echo $row['name']." ".$row['age']." ".$row['address']." ".$row['pincode'].'<br>'; $myarray['name'] = $row['name']; $myarray['age'] = $row['age']; $myarray['address'] = $row['address']; $myarray['pincode'] = $row['pincode']; } echo json_encode($myarray); 

Мой вывод (этот код успешно выдает это)

 {"name":"Peter","age":"30","address":"1 Elm Street","pincode":"91550"} 

Извлекая всю избыточность, используя правильные подготовленные операторы (предполагая PDO) и добавляя обработку ошибок (по крайней мере, заглушку), вы в итоге получаете следующее:

 $stmt = $conn->prepare('SELECT name, age, address, pincode FROM json WHERE name = ?'); $stmt->execute(array('peter')); if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo json_encode($row); } else { echo json_encode(array('status' => 'error')); } 

Если вы ожидаете несколько строк:

 echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)); 

Вы выбираете только нужные поля, поэтому можете просто сделать

 echo json_encode($stmt->fetch(PDO::FETCH_ASSOC)); 

EDIT: Вы упоминаете, что имя уникально, поэтому выше всего вам нужно.

 $row = $stmt->fetch(PDO::FETCH_ASSOC); echo json_encode($row); 

Вам не нужен цикл while, если в вашем результате есть только одна строка.