JSON encoder les résultats MySQL

comment utiliser la fonction json_encode() avec les résultats des requêtes MySQL? Ai-je besoin de parcourir les lignes ou puis-je simplement l'appliquer à l'ensemble de l'objet?

278
demandé sur Gottlieb Notschnabel 2008-12-20 22:09:44

20 réponses

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

La fonction json_encode a besoin de PHP >= 5.2 et le php-json paquet - comme mentionné ici

NOTE : mysql est déprécié à partir de PHP 5.5.0, utiliser mysqli extension à la place http://php.net/manual/en/migration55.deprecated.php .

459
répondu Paolo Bergantino 2017-05-23 12:18:24

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);
40
répondu ddavtian 2011-01-22 20:19:41

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

http://www.php.net/json_encode dit qu'il peut encoder n'importe quelle valeur"sauf une ressource".

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

24
répondu Hugh Bothwell 2011-12-02 20:44:59

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);
15
répondu Tokes 2011-05-24 10:16:36

Merci.. ma réponse est:

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";
        }
8
répondu aashima 2015-06-16 17:27:03

ce qui précède ne fonctionnera pas, d'après mon expérience, avant que vous ne nommiez l'élément racine dans le tableau de quelque chose, je n'ai pas été en mesure d'accéder à rien dans le le dernier json avant ça.

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

ça devrait faire l'affaire!

Pär

7
répondu Pär 2009-11-15 13:19:53

le code ci-dessous fonctionne très 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);
?>
6
répondu ferreirabraga 2016-07-27 14:30:11

mon correctif simple pour arrêter de mettre des marques de parole 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;
}   
3
répondu James 2012-08-21 15:14:33

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"]);

en gros:

"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
3
répondu gear4 2012-09-30 21:17:57

nous pourrions simplifier Paolo Bergantino réponse comme ceci

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));
2
répondu jrran90 2014-02-17 06:51:09

comment créer JSON en utilisant des données de la base de données MySQL

JSON (JavaScript Object Notation) est plus préférable de nos jours que XML car il est léger, lisible et facile à gérer pour échanger des données à travers diverses plates-formes. 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 ]

2
répondu indian 2015-05-30 07:36:50
<?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 ($rows,$row_array); aide pour construire le tableau sinon il donne la dernière valeur dans la boucle while

ce travail comme ajoute méthode de StringBuilder dans java

2
répondu DishantPatel 2016-09-19 07:48:03

une option de plus Utilisant pour boucle:

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

le seul inconvénient est que loop for est plus lent alors que par exemple ou surtout foreach

1
répondu NGix 2012-09-08 13:51:34

par exemple $result = mysql_query ("SELECT * FROM userprofiles where NAME= 'TESTUSER'");

1.) si $résultat est une seule ligne.

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

2.) si $résultat est plus qu'une ligne. Vous devez itérer les lignes et les enregistrer dans un tableau et retourner un JSON avec 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);
1
répondu Jyoti Prakash 2014-02-17 05:31:23

j'ai résolu comme ceci

$stmt->bind_result($cde,$v_off,$em_nm,$q_id,$v_m);
	$list=array();
	$i=0;
	while ($cresult=$stmt->fetch()){	
				
	
		$list[$i][0]=$cde;
		$list[$i][1]=$v_off;
		$list[$i][2]=$em_nm;
		$list[$i][3]=$q_id;
		$list[$i][4]=$v_m;
		$i=$i+1;
	}
	echo json_encode($list);		
Cela sera retourné à ajax comme résultat et en utilisant json analyser dans la partie javascript comme ceci :

obj = JSON.parse(dataX);
1
répondu Bineesh 2016-07-25 00:20:57

j'ai la même exigence. Je veux juste imprimer un objet de résultat dans le format JSON donc j'utilise le code ci-dessous. J'espère que vous trouverez quelque chose en elle.

// 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";
}
1
répondu Darshan Dhoriya 2016-10-13 22:59:00

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
répondu inrsaurabh 2017-02-24 10:14:31
$rows = json_decode($mysql_result,true);

aussi simple que cela: -)

0
répondu AMG Sistemas y Desarrollo 2013-05-15 02:26:37
$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).'}';
0
répondu Bijender Singh Shekhawat 2016-07-23 09:42:58

cochez le code ci-dessous pour utiliser mysql_fetch et json_encode. Vous devrez itérer à travers les lignes mais si vous utilisez mysqli la situation va changer

$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);
0
répondu user3172285 2017-09-21 10:39:21