Aus irgendeinem Grund wird der Artikel "Beschreibung" NULL
mit dem folgenden Code zurückgegeben:
<?php
include('db.php');
$result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error());
$rows = array();
while($row = mysql_fetch_assoc($result)){
$rows[] = $row;
}
echo json_encode($rows);
?>
Hier ist das Schema für meine Datenbank:
CREATE TABLE `staff` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` longtext COLLATE utf8_unicode_ci,
`description` longtext COLLATE utf8_unicode_ci,
`icon` longtext COLLATE utf8_unicode_ci,
`date` longtext COLLATE utf8_unicode_ci,
`company` longtext COLLATE utf8_unicode_ci,
`companyurl` longtext COLLATE utf8_unicode_ci,
`appurl` longtext COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Folgendes wird auf der Seite wiedergegeben:
[{"id":"4","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"},{"id":"3","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"}]
Irgendwelche Ideen?
$r['description']
außerhalb der for () -Anweisung mache .Antworten:
Ich wette, Sie rufen Daten in Nicht-Utf8-Codierung ab: Versuchen Sie, sie
mysql_query('SET CHARACTER SET utf8')
vor IhreSELECT
Abfrage zu stellen.quelle
Wenn Sie mindestens PHP 5.5 haben, können Sie json_last_error_msg () verwenden , das eine Zeichenfolge zurückgibt , die das Problem beschreibt.
Wenn Sie nicht über 5.5 verfügen, aber über 5.3 verfügen, können Sie mit json_last_error () das Problem ermitteln.
Es wird eine Ganzzahl zurückgegeben, mit der Sie das Problem in der Dokumentation der Funktion identifizieren können . Derzeit (19.01.2012) lauten die Kennungen:
Diese können sich in zukünftigen Versionen ändern. Lesen Sie daher besser das Handbuch.
Wenn Sie unter 5,3 sind, haben Sie kein Glück, es gibt keine Möglichkeit zu fragen, was der Fehler war.
quelle
Die Antwort von ntd hat mein Problem nicht gelöst. Für diejenigen in der gleichen Situation, hier ist, wie ich diesen Fehler endlich behandelt habe: Nur utf8_encode jedes Ihrer Ergebnisse.
Ich hoffe es hilft!
quelle
Vor ein paar Tagen habe ich das gleiche Problem mit 1 Tabelle.
Versuchen Sie zunächst:
Wenn die letzte Zeile 5 zurückgibt, liegt das Problem bei Ihren Daten . Ich weiß, Ihre Tabellen sind in UTF-8, aber keine eingegebenen Daten . Zum Beispiel war die Eingabe in einer txt-Datei, wurde aber auf einem Win-Computer mit dummer Codierung (in meinem Fall Win-1250 = CP1250) erstellt und diese Daten wurden in die Datenbank eingegeben.
Lösung? Suchen Sie nach neuen Daten (Excel, Webseite), bearbeiten Sie die Quell-TXT-Datei über PSPad (oder was auch immer), ändern Sie die Codierung in UTF-8 , löschen Sie alle Zeilen und fügen Sie jetzt Daten aus dem Original ein. Sparen. In DB eingeben .
Sie können die Codierung auch nur in utf-8 ändern und dann alle Zeilen manuell ändern (geben Sie Spalten mit speziellen Zeichen an - desc, ...). Gut für Sklaven ...
quelle
JSON_PARTIAL_OUTPUT_ON_ERROR
Option , um das Problem anzuzeigen (z. B. ist das Feld mit UTF8 null).Sie sollten eine utf8-codierte Zeichenfolge in json_encode übergeben. Sie können wie folgt verwenden
utf8_encode
undarray_map()
funktionieren:quelle
ÄHHH!!! Das sieht so falsch aus, dass es meinen Kopf verletzt. Versuchen Sie etwas ähnlicheres ...
mysql_num_rows
, sollten Sie<
nicht verwenden<=
. Sie sollten diesen Wert auch zwischenspeichern (in einer Variablen speichern), anstatt jede Schleife neu zählen zu lassen. Wer weiß, was es unter der Haube tut ... (könnte effizient sein, ich bin mir nicht sicher)mysql_fetch_array
gibt die Werte nachkey
und nach zurückint
. Sie verwenden die Indizes nicht, holen Sie sie also nicht ab.Wenn dies wirklich ein Problem ist
json_encode
, kann ich vorschlagen, den Körper der Schleife durch so etwas zu ersetzenVielleicht gibt es da drin einige spezielle Zeichen, die die Dinge durcheinander bringen ...
quelle
null
null
ist dies wahrscheinlich der Fallnull
. Versuchen Sie esecho $row['description'].'<br/>';
in dieser Schleife und sehen Sie, was darin steht.Die von PHP.net empfohlene Methode zum Einstellen des Zeichensatzes lautet nun wie folgt:
mysqli_set_charset ('utf8')
quelle
Für alle, die PDO verwenden, ähnelt die Lösung der Antwort von ntd .
Von der PHP PDO :: __ Konstruktionsseite als Kommentar des Benutzers Kiipa bei live dot com :
quelle
Für mich bestand ein Problem, bei dem json_encode die Nullcodierung einer Entität zurückgab, darin, dass meine jsonSerialize-Implementierung ganze Objekte für verwandte Entitäten abgerufen hat. Ich habe das Problem gelöst, indem ich sichergestellt habe, dass ich die ID der zugehörigen / zugeordneten Entität abgerufen und -> toArray () aufgerufen habe, wenn dem zu serialisierenden Objekt mehr als eine Entität zugeordnet war. Beachten Sie, ich spreche von Fällen, in denen es
implements JsonSerializable
um Entitäten geht.quelle
Ich hatte das gleiche Problem und die Lösung bestand darin, stattdessen meine eigene Funktion zu verwenden
json_encode()
quelle