2017-01-17 7 views
0

私はPHPでsimil web-serviceを構築しています。このWebサービスは、データベースのテーブルからすべてのレコードを読み取り、そのリストをjson形式で返します。phpでjson応答を出力するには

これは私のgetArticoli.phpファイルのコードです:私はこのURLで、このページを開くしようとした場合、

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

http://localhost/easyOrdine/getArticoli.php

私はjson_responseを得ることはありません。

データベースのテーブルには、1200レコードがあります。サイクル中にエコーメッセージを挿入しようとすると、表示されます。

私はこの問題は、この分野で産むことに気づいた:

"nome"=>'"'.$row_Articoli['NomeArticolo'].'"' 

私は応答からこのフィールドを削除した場合、私が正しくJSONレスポンスを見ることができます。

このフィールドには、a-z/0-9の任意の文字と "/ *? - その他"のような特殊文字があります。

これらの特殊文字がjson回答のエラーを引き起こす可能性がありますか?

EDIT 私は5私のクエリに制限があり、これが応答である:

[{"id":"878","0":"ACCESSORIO PULIZIA PUNTE DISSALDANTE 3 MISURE","quantita":"1","codiceBarre":"DN-705100","codartFornitore":"DN-705100","PrezzoAttuale":"14.39","prezzoRivenditore":null,"prezzoIngrosso":null}, 
{"id":"318","0":"ACCOPPIANTORE RJ11 TELEFONICO VALUELINE VLTP90920W","quantita":"20","codiceBarre":"5412810196043","codartFornitore":"5412810196043","PrezzoAttuale":"0.68","prezzoRivenditore":null,"prezzoIngrosso":null}, 
{"id":"320","0":"ACCOPPIATORE AUDIO RCA VALUELINE VLAB24950B","quantita":"5","codiceBarre":"5412810214136","codartFornitore":"5412810214136","PrezzoAttuale":"1.29","prezzoRivenditore":null,"prezzoIngrosso":null}, 
{"id":"310","0":"ACCOPPIATORE RJ45 VALUELINE VLCP89005W","quantita":"8","codiceBarre":"5412810228843","codartFornitore":"5412810228843","PrezzoAttuale":"0.38","prezzoRivenditore":null,"prezzoIngrosso":null}, 
{"id":"311","0":"ACCOPPIATORE USB2 VALUELINE VLCP60900B","quantita":"5","codiceBarre":"5412810179596","codartFornitore":"5412810179596","PrezzoAttuale":"1.80","prezzoRivenditore":null,"prezzoIngrosso":null}] 
+2

'' nome "=> $ row_Articoli ['NomeArticolo']'だけを使って、jsonパーサをエスケープしないのはなぜですか? – marian0

+0

あなたは正しい方法ですが、主な問題はこの "" 'とこれです。' '' '' '' $ row_Articoli ['NomeArticolo'] '' '' '' – Oliver

+0

エラー報告を有効にしましたか?これは、JSONを構築できない理由を理解するのに役立ちます。 – roberto06

答えて

2

まず、それらの余分な引用符を削除します。あなたはそれらを必要としないと、彼らは道をあなたを傷つけることができます:あなたは何が起こっているのにヒントを与える可能性がある、echo json_last_error_msg()';を実行し、その後

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なし)であるとして、あなたのクエリを実行し、その後。

また、あなたのDBはイタリア語で、おそらくそのエンコーディングはUTF-8ではありません。 json_encodeには、のUTF-8エンコードデータが必要です。だから、配列をjson_encoding前utf8_encodeあなたの記事名を試みることがあります。

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

そして、あなたが何を得る参照してください。

あなたのDBの文字セットを 'utf8mb4'に変更することもできますが、通常はお勧めです。

+0

ありがとう。あなたのコードは動作します。今私のデータベースのために、このcharsetはイタリア語に薦められますか?ありがとう – bircastri

+0

'utf8mb4'に設定してください。これをチェックしてください:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – yivi

関連する問題