Хранение SQL-запроса MySQL в JSON


запрос выглядит следующим образом у меня есть этот запрос: Consulta SQL

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>
                    ";   
                };

и результат:

Factura

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"
}
]

и я смог спокойно опустошить свой стол. Спасибо!

Author: J'Esaa, 2018-10-13

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);

Объяснение

  1. я объявляю свое соединение с PDO, где я могу дополнительно указать порт подключения
  2. я помещаю запрос внутри метода prepare()
  3. при передаче динамических данных означает, что они отправляются пользователем, мы должны использовать маркеры имен, которые выглядят так :name для случая PDO таким образом, мы минимизируем случай SQL INJECTION
  4. внутри метода execute я помещаю в ассоциативном массиве маркер имени :id и сопоставляю его с переменной, отправленной пользователем, которая в этом случае $id
  5. внутри новой переменной с именем $result я сопоставляю ее с методом JSON_ENCODE, где я вставляю переменную $consulta, которая, в свою очередь, обращается к методу fetchAll() с этим мы преобразуем наш запрос в формат JSON
  6. чтобы увидеть результат запроса, мы делаем var_dump() и результат это должно быть похоже на структуру, которую вы ищете
 3
Author: alo Malbarez, 2018-10-13 07:34:28