Comment utiliser la json_encode()fonction avec les résultats de requête MySQL? Dois-je parcourir les lignes ou puis-je simplement l'appliquer à l'objet de résultats entier?
Je sais que c'est une très vieille question. Mais personne ne montre l'alternative la plus simple pour résoudre le problème des entiers apparaissant sous forme de chaînes. @mouckatron propose le drapeau JSON_NUMERIC_CHECK json_encode()dans la réponse ci-dessous. Simple et ça marche comme un charme! stackoverflow.com/questions/1390983/…
Je vous conseillerais de mentionner que lors de la requête de sélection à utiliser ASpour renommer les colonnes en quelque chose pour le public, par exemple SELECT blog_title as title, c'est plus propre et le public ne sait pas quelles sont les colonnes exactes de la base de données.
RobertPitt
14
Ce code code par erreur toutes les valeurs numériques sous forme de chaînes. Par exemple, un champ numérique mySQL appelé score aurait une valeur JSON de "12" au lieu de 12 (notez les guillemets).
Theo
24
@RobertPitt, la sécurité basée sur la dissimulation des noms de vos colonnes est une sécurité par obscurité !
TMS
4
@Tomas true, mais la connaissance du nom exact des colonnes facilite considérablement les attaques par injection SQL
Tim Seguine
16
@Tim: Si vous arrivez au point où les noms de vos colonnes connus sont le seul obstacle à l'injection SQL que vous avez déjà perdu, non?
celui-ci, nous donnera un tableau contenant; 1) une parenthèse carrée vide 2) suivie par la parenthèse bouclée contenant nos lignes de résultat retournées quelle est cette différence par rapport à l'autre?
D'après mon expérience, ce qui précède ne fonctionnera pas avant de nommer l'élément racine du tableau à quelque chose, je n'ai pas pu accéder à quoi que ce soit dans le json final avant cela.
Désolé, c'est extrêmement long après la question, mais:
$sql ='SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]")
AS json
FROM users;'
$msl = mysql_query($sql)print($msl["json"]);
Fondamentalement:
"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.) si $ result est plus d'une ligne. Vous devez itérer les lignes et l'enregistrer dans un tableau et renvoyer un json contenant un tableau.
$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);
J'ai la même exigence. Je veux juste imprimer un objet résultat au format JSON, donc j'utilise le code ci-dessous. J'espère que vous y trouverez quelque chose.
// 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";}
Vérifiez le code ci-dessous pour utiliser mysql_fetch et json_encode. Vous devrez parcourir les lignes mais si vous utilisez mysqli, la situation changera
$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()
dans la réponse ci-dessous. Simple et ça marche comme un charme! stackoverflow.com/questions/1390983/…Réponses:
La fonction a
json_encode
besoin de PHP> = 5.2 et du paquet php-json - comme mentionné iciREMARQUE :
mysql
est obsolète à partir de PHP 5.5.0, utilisezmysqli
plutôt l'extension http://php.net/manual/en/migration55.deprecated.php .la source
AS
pour renommer les colonnes en quelque chose pour le public, par exempleSELECT blog_title as title
, c'est plus propre et le public ne sait pas quelles sont les colonnes exactes de la base de données.Essayez ceci, cela créera votre objet correctement
la source
http://www.php.net/mysql_query dit "
mysql_query()
renvoie une ressource".http://www.php.net/json_encode dit qu'il peut encoder n'importe quelle valeur "sauf une ressource".
Vous devez parcourir et collecter les résultats de la base de données dans un tableau, puis
json_encode
le tableau.la source
Merci, cela m'a beaucoup aidé. Mon code:
la source
Merci .. ma réponse va:
la source
D'après mon expérience, ce qui précède ne fonctionnera pas avant de nommer l'élément racine du tableau à quelque chose, je n'ai pas pu accéder à quoi que ce soit dans le json final avant cela.
Cela devrait faire l'affaire!
Par
la source
Le code ci-dessous fonctionne bien ici!
la source
Ma solution simple pour l'empêcher de mettre des marques vocales autour des valeurs numériques ...
la source
Désolé, c'est extrêmement long après la question, mais:
Fondamentalement:
la source
GROUP_CONCAT()
limité pargroup_concat_max_len
.nous pourrions simplifier la réponse de Paolo Bergantino comme ceci
la source
aarray_push ($ lignes, $ ligne_array); aider à construire un tableau sinon il donne la dernière valeur dans la boucle while
ce travail comme la méthode d' ajout de StringBuilder en java
la source
Encore une option en utilisant la boucle FOR:
Le seul inconvénient est que la boucle for est plus lente que par exemple pendant ou surtout foreach
la source
Par exemple $ result = mysql_query ("SELECT * FROM userprofiles where NAME = 'TESTUSER'");
1.) si $ result n'est qu'une seule ligne.
2.) si $ result est plus d'une ligne. Vous devez itérer les lignes et l'enregistrer dans un tableau et renvoyer un json contenant un tableau.
la source
J'ai la même exigence. Je veux juste imprimer un objet résultat au format JSON, donc j'utilise le code ci-dessous. J'espère que vous y trouverez quelque chose.
la source
Vérifiez le code ci-dessous pour utiliser mysql_fetch et json_encode. Vous devrez parcourir les lignes mais si vous utilisez mysqli, la situation changera
la source
J'ai résolu comme ça
Cela sera retourné à ajax en tant que jeu de résultats et en utilisant json parse dans la partie javascript comme ceci:
la source
la source
Code:
la source
aussi simple que cela :-)
la source
la source