2010-07-28 5 views
22

J'ai une requête de mysqli que j'ai besoin de mettre en forme comme json pour une application mobile.convertir le résultat de mysqli à json

J'ai réussi à produire un document XML pour les résultats de la requête, mais je cherche quelque chose de plus léger. (voir ci-dessous pour mon code xml actuel)

Toute aide ou information a grandement apprécié les gens!

$mysql = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME) or die('There was a problem connecting to the database'); 

$stmt = $mysql->prepare('SELECT DISTINCT title FROM sections ORDER BY title ASC'); 
$stmt->execute(); 
$stmt->bind_result($title); 

// create xml format 
$doc = new DomDocument('1.0'); 

// create root node 
$root = $doc->createElement('xml'); 
$root = $doc->appendChild($root); 

// add node for each row 
while($row = $stmt->fetch()) : 

    $occ = $doc->createElement('data'); 
    $occ = $root->appendChild($occ); 

    $child = $doc->createElement('section'); 
    $child = $occ->appendChild($child); 
    $value = $doc->createTextNode($title); 
    $value = $child->appendChild($value); 

    endwhile; 

$xml_string = $doc->saveXML(); 

header('Content-Type: application/xml; charset=ISO-8859-1'); 

// output xml jQuery ready 

echo $xml_string; 

Répondre

60
$mysqli = new mysqli('localhost','user','password','myDatabaseName'); 
$myArray = array(); 
if ($result = $mysqli->query("SELECT * FROM phase1")) { 

    while($row = $result->fetch_array(MYSQL_ASSOC)) { 
      $myArray[] = $row; 
    } 
    echo json_encode($myArray); 
} 

$result->close(); 
$mysqli->close(); 
  1. $row = $result->fetch_array(MYSQL_ASSOC)
  2. $myArray[] = $row

sortie comme ceci:

[ 
    {"id":"31","name":"pruduct_name1","price":"98"}, 
    {"id":"30","name":"pruduct_name2","price":"23"} 
] 
+0

up vote comme le plus succinct merci @will! – KryptoniteDove

+3

Utilisez ceci pour PHP 7.1.x pour récupérer la ligne entière en tant qu'objet si jamais vous devez récupérer plus d'une colonne. 'while ($ row = $ res-> fetch_object()) { $ myArray [] = $ ligne; } ' –

13

Comme mentionné, json_encode vous aidera. Le plus simple est de récupérer vos résultats comme vous le faites déjà et de construire un tableau qui peut être passé à json_encode.

Exemple:

$json = array(); 
while($row = $stmt->fetch()){ 
    $json[]['foo'] = "your content here"; 
    $json[]['bar'] = "more database results"; 
} 
echo json_encode($json); 

Votre $json sera un réseau régulier avec chaque élément dans son propre index.

Il devrait y avoir très peu de changements dans votre code ci-dessus, alternativement, vous pouvez retourner XML et JSON puisque la plupart du code est le même.

+1

assoc pour le plaisir d'extraction accrue. – Lodewijk

14

est ici comment je fait mon flux JSON:

$mysqli = new mysqli('localhost','user','password','myDatabaseName'); 
    $myArray = array(); 
    if ($result = $mysqli->query("SELECT * FROM phase1")) { 
     $tempArray = array(); 
     while($row = $result->fetch_object()) { 
       $tempArray = $row; 
       array_push($myArray, $tempArray); 
      } 
     echo json_encode($myArray); 
    } 

    $result->close(); 
    $mysqli->close(); 
0

Si vous avez l'extension Mysqlnd installé + activé en php, vous pouvez utiliser:

$mysqli = new mysqli('localhost','user','password','myDatabaseName'); 

$result = $mysqli->query("SELECT * FROM phase1"); 

//Copy result into a associative array 
$resultArray = $result->fetch_all(MYSQLI_ASSOC); 

echo json_encode($resultArray); 

mysqli :: fetch_all() a besoin pilote mysqlnd être installé avant pouvoir l'utiliser.

2

j'ai réussi à exécuter ce code:

<?php 
//create an array 
$emparray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    $emparray[] = $row; 
} 
return json_encode($emparray); 
?> 
+0

Cette réponse ne semble pas ajouter quelque chose de nouveau aux autres réponses. Toutes les autres réponses semblent utiliser la fonction json_encode –

Questions connexes