如何用php打印json响应

时间:2017-01-17 13:51:56

标签: php mysql json utf-8

我正在用php构建一个simil web服务。此Web服务可以从数据库表中读取所有记录,并以json格式返回它的列表。

这是我的getArticoli.php文件的代码:

UserID

现在,如果我尝试打开此页面,请使用此网址:http://localhost/easyOrdine/getArticoli.php

我没有得到json_response。

在数据库表中,有1200条记录。如果我尝试在while循环中插入echo消息,我会看到它。

我注意到问题出现在这个领域:

SELECT KeyID, UserID
FROM (
   SELECT KeyID, UserID,
          rn, COUNT(*) OVER (PARTITION BY UserID, grp ORDER BY KeyID DESC) AS rnk
   FROM (
      SELECT KeyID, UserID,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) AS rn,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) - 
             ROW_NUMBER() OVER (PARTITION BY UserID 
                                ORDER BY KeyID DESC) AS grp
      FROM mytable) AS t) AS x
ORDER BY rn + rnk, KeyID 

如果我从响应中删除此字段,我可以正确地看到json响应。

在此字段中,有来自a-z / 0-9的任何字符和特殊字符,如“/ *? - 和其他”。

这些特殊字符可能会导致json答案的任何错误吗?

  

EDIT   我的查询限制为5,这是回复:

<?php
require_once('lib/connection.php');
$query_Articolo = "SELECT CodArticolo,NomeArticolo,Quantita,CodiceBarre, PrezzoAttuale, PrezzoRivenditore,PrezzoIngrosso 
         FROM VistaArticoli ";

$result_Articoli = $connectiondb->query($query_Articolo);
$answer          = array ();
while ($row_Articoli = $result_Articoli->fetch_assoc()) {
    $answer[] = ["id"                => $row_Articoli['CodArticolo'],
                 "nome"              => '"' . $row_Articoli['NomeArticolo'] . '"',
                 "quantita"          => $row_Articoli['Quantita'],
                 "codiceBarre"       => $row_Articoli['CodiceBarre'],
                 "codartFornitore"   => $row_Articoli['CodiceBarre'],
                 "PrezzoAttuale"     => $row_Articoli['PrezzoAttuale'],
                 "prezzoRivenditore" => $row_Articoli['prezzoRivenditore'],
                 "prezzoIngrosso"    => $row_Articoli['prezzoIngrosso']];
}
//echo "fine";
echo json_encode($answer);
?>

1 个答案:

答案 0 :(得分:2)

首先,删除那些无关的引号字符。你不需要他们,他们可能会伤害你的道路:

while ($row_Articoli = $result_Articoli->fetch_assoc()) {
    $answer[] = [
                 "id"                => $row_Articoli['CodArticolo'],
                 "nome"              => $row_Articoli['NomeArticolo'],
                 "quantita"          => $row_Articoli['Quantita'],
                 "codiceBarre"       => $row_Articoli['CodiceBarre'],
                 "codartFornitore"   => $row_Articoli['CodiceBarre'],
                 "PrezzoAttuale"     => $row_Articoli['PrezzoAttuale'],
                 "prezzoRivenditore" => $row_Articoli['prezzoRivenditore'],
                 "prezzoIngrosso"    => $row_Articoli['prezzoIngrosso']
               ];
}

然后,按原样运行您的查询(不包含LIMIT),然后运行echo json_last_error_msg()';,这可以为您提供正在发生的事情的提示。

另外,由于你的数据库是意大利语,也许它的编码不是UTF-8。 json_encode 需要 UTF-8编码数据。因此,您可以在json_encoding数组之前尝试utf8_encode您的文章名称:

             "nome"              => utf8_encode($row_Articoli['NomeArticolo']),

看看你得到了什么。

将数据库字符集更改为“utf8mb4”也可以解决问题,通常建议使用。