2010-07-28 17 views
22

Mam zapytanie mysqli, które muszę sformatować jako json dla aplikacji mobilnej.Konwertuj wynik mysqli na json

Udało mi się wyprodukować dokument xml dla wyników zapytania, jednak szukam czegoś bardziej lekkiego. (patrz poniżej mój aktualny kod xml)

Każda pomoc lub informacja bardzo doceniła ludzi!

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

Odpowiedz

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

wyjście takiego:

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

oddać głos jak najbardziej zwięzłe dzięki @ @! – KryptoniteDove

+3

Użyj tego dla PHP 7.1.x, aby pobrać cały wiersz jako obiekt, jeśli kiedykolwiek będziesz musiał pobrać więcej niż jedną kolumnę. 'while ($ row = $ res-> fetch_object()) { $ myArray [] = $ rząd; } ' –

13

Jak wspomnieliśmy, pomoże ci json_encode. Najprostszym sposobem jest pobranie twoich wyników, tak jak już to zrobiłeś, i stworzenie tablicy, którą można przekazać do json_encode.

Przykład:

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

Twój $json będzie regularnym układzie z każdego elementu w jego własnym indeksie.

W powyższym kodzie powinno być niewiele zmian, alternatywnie możesz zwrócić zarówno XML, jak i JSON, ponieważ większość kodu jest taka sama.

+1

pobierał assoc zwiększenia przyjemności. – Lodewijk

14

oto jak zrobiłem mój kanał 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

Jeśli mysqlnd zainstalowane rozszerzenie php + włączony, można użyć:

$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() potrzebuje mysqlnd sterownik do zainstalowania przed może go używać.

2

udało mi się uruchomić ten kod:

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

Ta odpowiedź nie wydaje się dodawać niczego nowego do innych odpowiedzi. Wszystkie inne odpowiedzi zdają się korzystać z funkcji json_encode –