Хранение SQL-запроса MySQL в JSON
запрос выглядит следующим образом у меня есть этот запрос:
Edit> добавлен запрос в PHP:
if (!($resultado = $conexion->prepare("
SELECT
facturas.*, renglones.producto,
renglones.cantidad, renglones.precio_unitario,
renglones.total, renglones.porcentaje_iva
FROM facturas
INNER JOIN renglones
ON idfactura = facturas.id AND facturas.id = $id
"))){
echo "Fallo la Preparación";
};
if (!($resultado->execute())) {
echo "Fallo la ejecución de la consulta";
} else $resultado = $resultado->get_result();
$a = $resultado->fetch_assoc();
я просматриваю его через foreach или while.
дело в том, что мне не удается сделать json_encode ();
и пусть у меня останется что-то вроде этого:
{
"id": 3,
"numero": "0003",
"contribuyente": "ARIADNA PADRON",
"rif": "1263334486",
"fecha": "2018-10-11",
"monto": "375.00",
"producto": ["1":"PAN DULCE", "2":"PAN SALADO", "3":"QUESO"],
"cantidad": ["1":"10.00, "2":"10.00", "3":"0.50"],
"precio_unitario": ["1":"7.00, "2":"5.00", "3":"500.00"],
"total": ["1":"70.00", "2":"55.00", "3":"250.00"],
"porcentaje_iva": "16.00"
}
Мне трудно вытащить этот JSON, вероятно, какая-то логическая проблема в foreach или while (я пробовал оба).
файл JSON всегда заканчивается оставаясь таким:
{
"id": 3,
"numero": "0003",
"contribuyente": "ARIADNA PADRON",
"rif": "1263334486",
"fecha": "2018-10-11",
"monto": "375.00",
"producto": "PAN DULCE",
"cantidad": "10.00",
"precio_unitario": "7.00",
"total": "70.00",
"porcentaje_iva": "16.00"
}
Ну, в конце концов, я должен декодировать его и передать его через таблицу. Это я сделал только в PHP, но мне нужно, чтобы это было через JSON. И сохранить файл JSON. Я благодарен за всю возможную помощь.
while ($a = $resultado->fetch_assoc()) {
$total = $a['total'] - ($a['total']*0.16);
$subtotal += $total;
$total_iva += $a['total'] * $iva;
echo "
<tr>
<td class='renglon_detalle'>".$a['cantidad']."</td>
<td class='renglon_detalle'>".$a['producto']."</td>
<td class='renglon_detalle'>".$a['precio_unitario']."</td>
<td class='renglon_detalle'>".$a['porcentaje_iva']."</td>
<td class='renglon_detalle renglon_precio' colspan='2'>".$total."</td>
</tr>
";
};
и результат:
EDIT > изменения в JSON после применения решения @shadow:
[
{
"id": "3",
"0": "3",
"numero": "0003",
"1": "0003",
"contribuyente": "ARIADNA PADRON",
"2": "ARIADNA PADRON",
"rif": "1263334486",
"3": "1263334486",
"fecha": "2018-10-11",
"4": "2018-10-11",
"monto": "375.00",
"5": "375.00",
"producto": "PAN DULCE",
"6": "PAN DULCE",
"cantidad": "10.00",
"7": "10.00",
"precio_unitario": "7.00",
"8": "7.00",
"total": "70.00",
"9": "70.00",
"porcentaje_iva": "16.00",
"10": "16.00"
},
{
"id": "3",
"0": "3",
"numero": "0003",
"1": "0003",
"contribuyente": "ARIADNA PADRON",
"2": "ARIADNA PADRON",
"rif": "1263334486",
"3": "1263334486",
"fecha": "2018-10-11",
"4": "2018-10-11",
"monto": "375.00",
"5": "375.00",
"producto": "PAN SALADO",
"6": "PAN SALADO",
"cantidad": "10.00",
"7": "10.00",
"precio_unitario": "5.00",
"8": "5.00",
"total": "55.00",
"9": "55.00",
"porcentaje_iva": "16.00",
"10": "16.00"
},
{
"id": "3",
"0": "3",
"numero": "0003",
"1": "0003",
"contribuyente": "ARIADNA PADRON",
"2": "ARIADNA PADRON",
"rif": "1263334486",
"3": "1263334486",
"fecha": "2018-10-11",
"4": "2018-10-11",
"monto": "375.00",
"5": "375.00",
"producto": "QUESO",
"6": "QUESO",
"cantidad": "0.50",
"7": "0.50",
"precio_unitario": "500.00",
"8": "500.00",
"total": "250.00",
"9": "250.00",
"porcentaje_iva": "16.00",
"10": "16.00"
}
]
Как я оставляю свой SQL-запрос в PHP:
if (!($consulta = $conexion->prepare("
SELECT
facturas.*, renglones.producto,
renglones.cantidad, renglones.precio_unitario,
renglones.total, renglones.porcentaje_iva
FROM facturas
INNER JOIN renglones
ON idfactura = facturas.id AND facturas.id = :id
"))) {
echo "Fallo la Preparación";
};
if (!($consulta->execute([':id' => $id]))) {
echo "Fallo la ejecución de la consulta";
}
$resultado = JSON_ENCODE($consulta->fetchAll(), JSON_PRETTY_PRINT);
$archivo = 'factura.json';
file_put_contents($archivo, $resultado);
var_dump($resultado);
EDIT>завершено с помощью @shadow
$resultado = JSON_ENCODE($consulta->fetchAll(PDO::FETCH_ASSOC), JSON_PRETTY_PRINT);
и так мой JSON:
[
{
"id": "3",
"numero": "0003",
"contribuyente": "ARIADNA PADRON",
"rif": "1263334486",
"fecha": "2018-10-11",
"monto": "375.00",
"producto": "PAN DULCE",
"cantidad": "10.00",
"precio_unitario": "7.00",
"total": "70.00",
"porcentaje_iva": "16.00"
},
{
"id": "3",
"numero": "0003",
"contribuyente": "ARIADNA PADRON",
"rif": "1263334486",
"fecha": "2018-10-11",
"monto": "375.00",
"producto": "PAN SALADO",
"cantidad": "10.00",
"precio_unitario": "5.00",
"total": "55.00",
"porcentaje_iva": "16.00"
},
{
"id": "3",
"numero": "0003",
"contribuyente": "ARIADNA PADRON",
"rif": "1263334486",
"fecha": "2018-10-11",
"monto": "375.00",
"producto": "QUESO",
"cantidad": "0.50",
"precio_unitario": "500.00",
"total": "250.00",
"porcentaje_iva": "16.00"
}
]
и я смог спокойно опустошить свой стол. Спасибо!
1 answers
Я рекомендую использовать PDO, для чего я оставляю вам объясненный пример
<?php
$conexion = new PDO("mysql:host=localhost;dbname=blog;port=3307", "root", "password");
$id = 1;
$consulta = $conexion->prepare("
SELECT
facturas.*, renglones.producto,
renglones.cantidad, renglones.precio_unitario,
renglones.total, renglones.porcentaje_iva
FROM facturas
INNER JOIN renglones
ON idfactura = facturas.id AND facturas.id = :id
");
$consulta->execute([':id' => $id]);
$resultado = JSON_ENCODE($consulta->fetchAll());
var_dump($resultado);
Объяснение
- я объявляю свое соединение с PDO, где я могу дополнительно указать порт подключения
- я помещаю запрос внутри метода
prepare()
- при передаче динамических данных означает, что они отправляются пользователем, мы должны использовать маркеры имен, которые выглядят так
:name
для случая PDO таким образом, мы минимизируем случай SQL INJECTION - внутри метода execute я помещаю в ассоциативном массиве маркер имени
:id
и сопоставляю его с переменной, отправленной пользователем, которая в этом случае$id
- внутри новой переменной с именем
$result
я сопоставляю ее с методомJSON_ENCODE
, где я вставляю переменную$consulta
, которая, в свою очередь, обращается к методуfetchAll()
с этим мы преобразуем наш запрос в формат JSON - чтобы увидеть результат запроса, мы делаем
var_dump()
и результат это должно быть похоже на структуру, которую вы ищете