2017-01-17 1 views
0

나는 PHP에서 simil 웹 서비스를 만들고있다. 이 웹 서비스는 데이터베이스 테이블에서 모든 레코드를 읽고 json 형식으로 그 목록을 반환 할 수 있습니다. 나는이 URL로이 페이지를 열려고하면, 이제PHP로 json 응답을 인쇄 할 수있는 방법

<?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을하지 않는

내 getArticoli.php 파일의 코드입니다.

데이터베이스 테이블에는 1200 개의 레코드가 있습니다. 사이클 중에 에코 메시지를 삽입하려고하면 볼 수 있습니다.

나는 문제가이 필드를 낳는 것으로 나타났습니다 : 나는 응답에서이 필드를 제거하면, 내가 제대로 JSON 응답을 볼 수 있습니다

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

.

이 필드에는 a-z/0-9의 문자와 "/ *? - 및 기타"와 같은 특수 문자가 있습니다.

이러한 특수 문자로 json 응답 오류가 발생할 수 있습니까?

편집 나는 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 인코딩 데이터가 필요합니다.

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

을 그리고 당신은 무엇을 얻을 참조 : 그래서 당신은 배열을 json_encoding 전에 utf8_encode 기사의 이름으로 시도 할 수 있습니다.

DB charset을 'utf8mb4'로 변경하면 트릭을 수행 할 수 있으며 일반적으로 권장됩니다.

+0

감사합니다. 코드가 작동합니다. 이제 내 데이터베이스에,이 charset 이탈리아어에 게 좋습니다 ??? thanks – bircastri

+0

'utf8mb4'로 설정하십시오. 이것 좀보세요 : http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – yivi