2016-05-05 8 views
0

Ich versuche, alle Zeilen meiner MSSQL-Datenbanktabelle zurückzugeben und spuckt sie in einem JSON_ENCODE aus.PHP Json Codieren PDO :: FETCH_ASSOC

Wenn ich dies benutze und das $ json Echo gebe ich eine leere Seite. Wenn ich eine var_dump für diese Var mache, bekomme ich eine bool, false.

$sth = $db->prepare("SELECT * FROM dbo.Devices"); 
$sth->execute(); 

$array = $sth->fetchAll(PDO::FETCH_ASSOC); 
$json = json_encode($array); 

Allerdings, wenn ich die gleiche fetchAll in Folge var und drucken Sie es zu platzieren war, es funktioniert gut!

Working using print function. 
$result = $sth->FetchAll(); 
print_r($result); 

Ich habe von anderen gelesen ähnliche Probleme haben und dass es ein UTF8 Problem war, so dass ich eine utf8_encode auf dem $ Array vor einem json_encode aber mit dem gleichen Ergebnis einer leeren Seite zu tun versucht. Kann das jemand erklären?

+0

Sie verwenden 'PDO :: FETCH_ASSOC' nicht im zweiten Beispiel. Ermöglicht das Entfernen dieser Option das 'json_encode()' Ergebnis? – WillardSolutions

+0

Nein, ich bekomme eine leere Seite, wenn ich das auch entferne. – 0perator

+0

Warten Sie, erhalten Sie eine leere Seite, weil Sie die json_encoded Ergebnisse nicht ausdrucken? 'print_r' wird auf den Bildschirm gedruckt,' json_encode' nicht. – WillardSolutions

Antwort

1

json_encode ist Zeichencodierung empfindlich. Es wird fehlschlagen, wenn es die Codierung nicht verarbeiten kann. print_r ist nicht. Es wird glücklich ausdrucken, was immer Sie ihm geben. Die utf8_encode Korrektur funktioniert nur, wenn die Zeichenfolgen in Ihren Quelldaten als ISO-8859-1 codiert sind Angenommen, das stimmt, sollte es funktionieren. Stellen Sie sicher, dass Sie es so machen ... https://stackoverflow.com/a/2790107/111755