2010-07-28 28 views
22

Tengo una consulta mysqli que debo formatear como json para una aplicación móvil.convertir resultado mysqli a json

He logrado producir un documento xml para los resultados de la consulta, sin embargo, estoy buscando algo más ligero. (Vea abajo para mi código xml actual)

¡Cualquier ayuda o información agradeció a las personas!

$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; 

Respuesta

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

salida como esta:

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

up voto como más sucinto gracias @will! – KryptoniteDove

+3

Utilice esto para PHP 7.1.x para recuperar toda la fila como un objeto si alguna vez tiene que recuperar más de una columna. 'while ($ row = $ res-> fetch_object()) { $ myArray [] = $ fila; } ' –

13

Como se mencionó, json_encode le ayudará. La forma más fácil es buscar los resultados como ya lo hace y crear una matriz que se puede pasar al json_encode.

Ejemplo:

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

Su $json habrá una serie regular con cada elemento de su propio índice.

Debe haber muy pocos cambios en su código anterior, alternativamente, puede devolver tanto XML como JSON ya que la mayoría del código es el mismo.

+1

fetch Assoc para incrementar el placer. – Lodewijk

14

aquí es como hice mi JSON alimentación:

$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 ha mysqlnd extensión instalada + habilitado en PHP, puede utilizar:

$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() necesita conductor mysqlnd para ser instalado antes de puede utilizarlo.

2

me las arreglé para ejecutar este código:

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

Esta respuesta no parece agregar nada nuevo a las otras respuestas. Todas las demás respuestas parecen estar usando la función json_encode –