web-dev-qa-db-fra.com

JSON encoder les résultats MySQL

Comment utiliser la fonction json_encode() avec les résultats de la requête MySQL? Dois-je parcourir les lignes ou puis-je simplement l'appliquer à l'objet de résultats entier?

285
Trick Jarrett
$sth = mysqli_query("SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

La fonction json_encode nécessite PHP> = 5.2 et le paquetage php-json - comme mentionné ici

NOTE: mysql est obsolète à partir de PHP 5.5.0, utilisez plutôt l'extension mysqli _ http://php.net/manual/en/migration55.deprecated.php .

469
Paolo Bergantino

Essayez ceci, cela créera votre objet correctement

 $result = mysql_query("SELECT ...");
 $rows = array();
   while($r = mysql_fetch_assoc($result)) {
     $rows['object_name'][] = $r;
   }

 print json_encode($rows);
42
ddavtian

http://www.php.net/mysql_query dit "mysql_query() renvoie une ressource".

http://www.php.net/json_encode indique qu'il peut encoder n'importe quelle valeur "à l'exception d'une ressource".

Vous devez parcourir et collecter les résultats de la base de données dans un tableau, puis json_encode le tableau.

25
Hugh Bothwell

Merci cela m'a beaucoup aidé. Mon code:

$sqldata = mysql_query("SELECT * FROM `$table`");

$rows = array();
while($r = mysql_fetch_assoc($sqldata)) {
  $rows[] = $r;
}

echo json_encode($rows);
16
Tokes

Merci .. ma réponse va:

if ($result->num_rows > 0) {
            # code...
            $arr = [];
            $inc = 0;
            while ($row = $result->fetch_assoc()) {
                # code...
                $jsonArrayObject = (array('lat' => $row["lat"], 'lon' => $row["lon"], 'addr' => $row["address"]));
                $arr[$inc] = $jsonArrayObject;
                $inc++;
            }
            $json_array = json_encode($arr);
            echo $json_array;
        }
        else{
            echo "0 results";
        }
9
aashima

Ce qui précède ne fonctionnera pas, selon mon expérience, avant que vous nommiez l'élément racine .__ dans le tableau en quelque chose, je n'ai pas pu accéder à quoi que ce soit dans le fichier final

$sth = mysql_query("SELECT ...");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows['root_name'] = $r;
}
print json_encode($rows);

Cela devrait faire l'affaire!

Par

8
Pär

Le code ci-dessous fonctionne bien ici!

<?php

  $con=mysqli_connect("localhost",$username,$password,databaseName);

  // Check connection
  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query = "the query here";

  $result = mysqli_query($con,$query);

  $rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] = $r;
  }
  echo json_encode($rows);

  mysqli_close($con);
?>
7
ferreirabraga

Désolé, cela fait très longtemps 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"]);

Juste fondamentalement:

"SELECT" Select the rows    
"CONCAT" Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT" Returns a string with concatenated non-NULL value from a group
4
gear4

Ma solution simple pour arrêter de mettre des marques de langage autour des valeurs numériques ...

while($r = mysql_fetch_assoc($rs)){
    while($Elm=each($r))
    {
        if(is_numeric($r[$Elm["key"]])){
                    $r[$Elm["key"]]=intval($r[$Elm["key"]]);
        }
    }
    $rows[] = $r;
}   
4
James
<?php
define('Host','localhost');
define('USER','root');
define('PASS','');
define('DB','dishant');

$con = mysqli_connect(Host,USER,PASS,DB);


  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

 $sql = "select * from demo ";

 $sth = mysqli_query($con,$sql);

$rows = array();

while($r = mysqli_fetch_array($sth,MYSQL_ASSOC)) {

 $row_array['id'] = $r;

    **array_Push($rows,$row_array);**
}
echo json_encode($rows);

mysqli_close($con);
?>

aarray_Push ($ row, $ row_array); help pour construire un tableau sinon il donne la dernière valeur de la boucle while

ce travail comme append méthode de StringBuilder in Java

3
DishantPatel

nous pourrions simplifier Paolo Bergantino répondre comme ça

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));
3
jrran90

Comment créer JSON en utilisant les données de la base de données MySQL

JSON (JavaScript Object Notation) est davantage préféré de nos jours au XML, car il est léger, lisible et facile à gérer pour l’échange de données sur différentes plateformes. Nous verrons comment les données JSON peuvent être créées à partir de la table des employés stockée dans la base de données MySQL. 

 echo json_encode($data);

Live: [Exemple ]

3
indian

Par exemple $ Result = mysql_query ("SELECT * FROM userprofiles où NAME = 'TESTUSER'");

1.) si $ result est seulement une ligne.

$response = mysql_fetch_array($result);
echo json_encode($response);

2.) si $ result est plus d'une ligne. Vous devez itérer les lignes, les 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);
2
Jyoti Prakash

J'ai la même exigence. Je veux juste imprimer un objet de résultat au format JSON afin d'utiliser 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";
}
2
Darshan Dhoriya

Une option supplémentaire utilisant la boucle FOR:

 $sth = mysql_query("SELECT ...");
 for($rows = array(); $row = mysql_fetch_assoc($sth); $rows[] = $row);
 print json_encode($rows);

Le seul inconvénient est que la boucle est plus lente que par exemple. pendant ou surtout pour chaque

2
NGix
$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).'}';
1
$rows = json_decode($mysql_result,true);

aussi simple que cela :-)

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.

$kt_query="SELECT * FROM tbl_xxx";
$kt_result = mysql_query($kt_query) or die('Query failed: ' . mysql_error());
$rows= array();
while($sonuc=mysql_fetch_assoc($kt_result))
{
    $rows[]=$sonuc;
}
print json_encode($rows);
1
user3172285

Code:

$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);
1
inrsaurabh

$sql = "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', tbl.id)) FROM table tbl WHERE... "; 

//And get first row :) 


0
Andrey Mashukov