JSON in PHP with existing fields printing as Null, how to solve? [duplicate]

2

I have a SELECT that is not returning me some fields, such as "Notes". In the following image I'm ready the array and see that it is like "Null" the observations field:

MyreturnSQListhis:

<?phpheader('Content-type:application/json');header('Access-Control-Allow-Origin:*');include'database.php';$num_pedido=$_GET['num_pedido'];$query="SELECT
   dados_pedido.iddados_pedido,
   dados_pedido.nome,
   dados_pedido.endereco,
   dados_pedido.numero,
   dados_pedido.complemento,
   dados_pedido.bairro,
   dados_pedido.cidade,
   dados_pedido.estado,
   dados_pedido.cod_cliente,
   dados_pedido.outro_endereco_cod,
   dados_pedido.forma_pagamento,
   dados_pedido.troco,
   dados_pedido.frete,
   dados_pedido.valor_pedido,
   dados_pedido.cod_fornecedor,
   dados_pedido.total_pedido,
   dados_pedido.observacoes,
   dados_pedido.status_pedido,
   dados_pedido.data_hora_pedido,
   item_pedidos.iditens_pedido,
   item_pedidos.nome,
   item_pedidos.imagem,
   item_pedidos.preco_un,
   item_pedidos.qtd,
   item_pedidos.cod_fornecedor,
   item_pedidos.iddados_pedido
FROM
   dados_pedido INNER JOIN item_pedidos ON dados_pedido.iddados_pedido = item_pedidos.iddados_pedido AND dados_pedido.cod_fornecedor = item_pedidos.cod_fornecedor
WHERE 
   dados_pedido.iddados_pedido='$num_pedido'";


$result=$con->query($query);

$row_cnt = mysqli_num_rows($result);
if ($result->num_rows > 0) 
{
    $count=0;
    echo "[";
    while($row = $result->fetch_assoc()) 
    {
            $count++;
            echo json_encode($row);

            if($count!=$row_cnt)
            {
                    echo ",";
            }


    }
    echo "]";
}
else
{
echo "error";
}

?>

SQL, when run without the condition, shows me ALL fields:

WhatamIdoingwronghere?HowdoIdisplaythe"Remarks" field on my return?

    
asked by anonymous 27.03.2017 / 20:59

1 answer

3

You need to be using the same format, UTF-8 in the database and logically do UPDATE / INSERT using the same formatting .

To do this first use, for example, back up before :

ALTER TABLE 'tabela'
 COLLATE='utf8mb4_unicode_ci',
   CONVERT TO CHARSET utf8mb4;

This will make use of UTF-8 .

Then, in PHP, for obvious reasons it would be ideal to also use the same CHARSET :

mysqli_set_charset($conexao, 'utf8mb4');

Now just use json_encode with JSON_UNESCAPED_UNICODE as indicated in this post.

json_encode($fetch, JSON_UNESCAPED_UNICODE);

If you use the driver from Mysqlnd you can use the < and will waive the use of mysqli_fetch_all :

  • header('Content-type: application/json');
    header('Access-Control-Allow-Origin: *');
    
    include 'database.php';
    $con->set_charset('utf8mb4');
    
    $num_pedido = $con->real_escape_string($_GET['num_pedido']); 
    
    $query = "SELECT dados_pedido.iddados_pedido, dados_pedido.nome, dados_pedido.endereco, dados_pedido.numero, dados_pedido.complemento, dados_pedido.bairro, dados_pedido.cidade, dados_pedido.estado, dados_pedido.cod_cliente, dados_pedido.outro_endereco_cod, dados_pedido.forma_pagamento, dados_pedido.troco, dados_pedido.frete, dados_pedido.valor_pedido, dados_pedido.cod_fornecedor, dados_pedido.total_pedido, dados_pedido.observacoes, dados_pedido.status_pedido, dados_pedido.data_hora_pedido, item_pedidos.iditens_pedido, item_pedidos.nome, item_pedidos.imagem, item_pedidos.preco_un, item_pedidos.qtd, item_pedidos.cod_fornecedor, item_pedidos.iddados_pedido FROM dados_pedido INNER JOIN item_pedidos ON dados_pedido.iddados_pedido = item_pedidos.iddados_pedido AND dados_pedido.cod_fornecedor = item_pedidos.cod_fornecedor WHERE dados_pedido.iddados_pedido='$num_pedido'";
    $queryExecutada = $con->query($query);
    
    $resposta = $queryExecutada->fetch_all(MYSQLI_ASSOC);
    
    echo json_encode($resposta, JSON_UNESCAPED_UNICODE);
    

    This will do the same thing, with much less code, using while and also real_escape_string .

        
  • 27.03.2017 / 21:52