Pasé muchas horas tratando de descubrir la forma correcta de generar una matriz / objeto json desde la base de datos mysql de esta manera:

expected output 
    {
        "ITEM1": 20,
        "ITEM2": 15,
        "ITEM3": 12
    }

Como cada par clave / valor correspondiente a una fila de la tabla mysql (no es necesario mostrar la columna ID).

id |item| price

Este es mi código actual usando MYSQLND driver en debian:

<?php
header('Content-Type: application/json');

$servername = "localhost";
$username = "root";
$password = "pswd";
$dbname = "json";


$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$itemInitArr = array();
$decharge = 0;
$stmt = $conn->prepare("SELECT item, price FROM stock WHERE total_sold = ?");
$stmt->bind_param("i", $decharge);
$stmt->execute();
$result = $stmt->get_result();


                            while ($itemInit = $result->fetch_assoc())
                            {
                                $itemInitArr[] = array (
                                            $itemInit['item'] => $itemInit['price']
                                    );
                            }
$stmt->close();                         
$final_data = json_encode($itemInitArr, JSON_PRETTY_PRINT); 
echo $final_data;

$conn->close();
?>

Que da salida a esto:

[
    {
        "ITEM1": 20
    },
    {
        "ITEM2": 15
    },
    {
        "ITEM3": 12
    }
]

Entonces, ¿dónde está el error y cómo resolverlo para que coincida con la salida esperada?

0
Origin 8 sep. 2018 a las 11:32

3 respuestas

La mejor respuesta

Si cambia la forma en que construye su matriz para ...

$itemInitArr[$itemInit['item']] =  $itemInit['price'];
1
Nigel Ren 8 sep. 2018 a las 08:40
  <?php
header('Content-Type: application/json');

$servername = "localhost";
$username = "root";
$password = "pswd";
$dbname = "json";


$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$itemInitArr = array();
$decharge = 0;
$stmt = $conn->prepare("SELECT item, price FROM stock WHERE total_sold = ?");
$stmt->bind_param("i", $decharge);
$stmt->execute();
$result = $stmt->get_result();


                            while ($itemInit = $result->fetch_assoc())
                            {
                                $itemInitArr[$itemInit['item']] = $itemInit['price'];

                            }
$stmt->close();                         
$final_data = json_encode($itemInitArr, JSON_PRETTY_PRINT); 
echo $final_data;

$conn->close();
?>
0
cool_benn 8 sep. 2018 a las 09:31

Tratar de usar

$idx = 1; 
while ($itemInit = $result->fetch_assoc()){
     $itemInitArr['ITEM'.$idx] =  $itemInit['price'];
     $idx++;
}
$final_data = json_encode($itemInitArr, JSON_PRETTY_PRINT); 

De si el ARTÍCULO 1 ... EL ARTÍCULO es el contenido del elemento de la columna

     $itemInitArr[$itemInit['item']] =  $itemInit['price'];
0
scaisEdge 8 sep. 2018 a las 09:09