Wie verwende ich die json_encode()Funktion mit MySQL-Abfrageergebnissen? Muss ich die Zeilen durchlaufen oder kann ich sie einfach auf das gesamte Ergebnisobjekt anwenden?
Ich weiß, dass dies eine sehr alte Frage ist. Aber niemand zeigt die einfachste Alternative zur Behebung des Problems, dass Ganzzahlen als Zeichenfolgen angezeigt werden. @mouckatron bietet das JSON_NUMERIC_CHECK-Flag von json_encode()in der Antwort unten an. Einfach und es funktioniert wie ein Zauber! stackoverflow.com/questions/1390983/…
Ich würde Ihnen ebenso raten, zu erwähnen, dass dies während der Auswahlabfrage, mit ASder die Spalten in etwas für die Öffentlichkeit umbenannt werden sollen SELECT blog_title as title, sauberer ist und die Öffentlichkeit nicht weiß, welche genauen Spalten aus der Datenbank stammen.
RobertPitt
14
Dieser Code codiert fälschlicherweise alle numerischen Werte als Zeichenfolgen. Zum Beispiel hätte ein numerisches mySQL-Feld namens score einen JSON-Wert von "12" anstelle von 12 (beachten Sie die Anführungszeichen).
Theo
24
@RobertPitt, Sicherheit basierend auf dem Verbergen von Namen Ihrer Spalten ist Sicherheit durch Dunkelheit !
TMS
4
@Tomas wahr, aber die genauen Spaltennamen zu kennen, macht SQL-Injection-Angriffe erheblich einfacher
Tim Seguine
16
@Tim: Wenn Sie an einem Punkt angelangt sind, an dem die Bekanntheit Ihrer Spaltennamen das einzige Hindernis für die SQL-Injection ist, das Sie bereits verloren haben, nein?
Paolo Bergantino
44
Versuchen Sie dies, dies wird Ihr Objekt richtig erstellen
Dieser wird uns ein Array geben, das enthält; 1) eine leere eckige Klammer 2) gefolgt von der geschweiften Klammer mit unseren zurückgegebenen Ergebniszeilen. Was unterscheidet diese von der anderen?
Das Obige wird meiner Erfahrung nach nicht funktionieren, bevor Sie das Stammelement im Array mit etwas benennen. Ich konnte vorher im letzten JSON auf nichts zugreifen.
Entschuldigung, das ist extrem lange nach der Frage, aber:
$sql ='SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]")
AS json
FROM users;'
$msl = mysql_query($sql)print($msl["json"]);
Nur im Grunde:
"SELECT"Select the rows
"CONCAT"Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT"Returns a stringwith concatenated non-NULL valuefrom a group
2.) wenn $ result mehr als eine Zeile ist. Sie müssen die Zeilen iterieren und in einem Array speichern und einen JSON mit Array zurückgeben.
$rows = array();if(mysql_num_rows($result)>0){while($r = mysql_fetch_assoc($result)){
$id = $r["USERID"];//a column name (ex.ID) used to get a value of the single row at at time
$rows[$id]= $r;//save the fetched row and add it to the array.}}
echo json_encode($rows);
Ich habe die gleiche Anforderung. Ich möchte nur ein Ergebnisobjekt im JSON-Format drucken, daher verwende ich den folgenden Code. Ich hoffe du findest etwas darin.
// Code of Conversion
$query ="SELECT * FROM products;";
$result = mysqli_query($conn , $query);if($result){
echo "</br>"."Results Found";// Conversion of result object into JSON format
$rows = array();while($temp = mysqli_fetch_assoc($result)){
$rows[]= $temp;}
echo "</br>". json_encode($rows);}else{
echo "No Results Found";}
Überprüfen Sie den folgenden Code für die Verwendung von mysql_fetch und json_encode. Sie müssen die Zeilen durchlaufen, aber wenn Sie mysqli verwenden, ändert sich die Situation
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');while($row = mysql_fetch_array($sql_results)){
$subArray[location_id]=$row['location'];//location_id is key and $row['location'] is value which come fron database.
$subArray[x]=$row['x'];
$subArray[y]=$row['y'];
$array[]= $subArray ;}
echo'{"ProductsData":'.json_encode($array).'}';
$rows = array();while($r = mysqli_fetch_array($result,MYSQL_ASSOC)){
$row_array['result']= $r;
array_push($rows,$row_array);// here we push every iteration to an array otherwise you will get only last iteration value}
echo json_encode($rows);
json_encode()
in der Antwort unten an. Einfach und es funktioniert wie ein Zauber! stackoverflow.com/questions/1390983/…Antworten:
Die Funktion
json_encode
benötigt PHP> = 5.2 und das php-json- Paket - wie hier erwähntHINWEIS :
mysql
Ab PHP 5.5.0 veraltet. Verwenden Siemysqli
stattdessen die Erweiterung http://php.net/manual/en/migration55.deprecated.php .quelle
AS
der die Spalten in etwas für die Öffentlichkeit umbenannt werden sollenSELECT blog_title as title
, sauberer ist und die Öffentlichkeit nicht weiß, welche genauen Spalten aus der Datenbank stammen.Versuchen Sie dies, dies wird Ihr Objekt richtig erstellen
quelle
http://www.php.net/mysql_query sagt "
mysql_query()
gibt eine Ressource zurück".http://www.php.net/json_encode sagt, dass es jeden Wert "außer einer Ressource" codieren kann.
Sie müssen die Datenbankergebnisse durchlaufen und in einem Array und dann
json_encode
im Array sammeln .quelle
Danke, das hat mir sehr geholfen. Mein Code:
quelle
Danke .. meine Antwort lautet:
quelle
Das Obige wird meiner Erfahrung nach nicht funktionieren, bevor Sie das Stammelement im Array mit etwas benennen. Ich konnte vorher im letzten JSON auf nichts zugreifen.
Das sollte den Trick machen!
Par
quelle
Der folgende Code funktioniert hier einwandfrei!
quelle
Meine einfache Lösung, um zu verhindern, dass numerische Werte mit Sprachmarkierungen versehen werden ...
quelle
Entschuldigung, das ist extrem lange nach der Frage, aber:
Nur im Grunde:
quelle
GROUP_CONCAT()
durch begrenzt istgroup_concat_max_len
.Wir könnten die Antwort von Paolo Bergantino so vereinfachen
quelle
aarray_push ($ rows, $ row_array); Hilfe beim Erstellen eines Arrays, andernfalls wird der letzte Wert in der while-Schleife angegeben
Dies funktioniert wie die Append- Methode von StringBuilder in Java
quelle
Eine weitere Option mit der FOR-Schleife:
Der einzige Nachteil ist, dass die Schleife für langsamer ist als zB während oder besonders für jede
quelle
Zum Beispiel $ result = mysql_query ("SELECT * FROM Benutzerprofile wobei NAME = 'TESTUSER'");
1.) wenn $ result nur eine Zeile ist.
2.) wenn $ result mehr als eine Zeile ist. Sie müssen die Zeilen iterieren und in einem Array speichern und einen JSON mit Array zurückgeben.
quelle
Ich habe die gleiche Anforderung. Ich möchte nur ein Ergebnisobjekt im JSON-Format drucken, daher verwende ich den folgenden Code. Ich hoffe du findest etwas darin.
quelle
Überprüfen Sie den folgenden Code für die Verwendung von mysql_fetch und json_encode. Sie müssen die Zeilen durchlaufen, aber wenn Sie mysqli verwenden, ändert sich die Situation
quelle
Ich habe so gelöst
Dies wird als Ergebnismenge und unter Verwendung von json parse in einem Javascript-Teil wie folgt an ajax zurückgegeben:
quelle
quelle
Code:
quelle
so einfach ist das :-)
quelle
quelle