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, если в вашем результате есть только одна строка.