2010-07-28 2 views
22

У меня есть запрос mysqli, который мне нужно отформатировать как json для мобильного приложения.преобразовать результат mysqli в json

Мне удалось создать XML-документ для результатов запроса, однако я ищу что-то более легкое. (см. ниже мой текущий xml-код)

Любая помощь или информация очень ценится людям!

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

ответ

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

выход так:

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

голосуйте как наиболее лаконичное спасибо @will! – KryptoniteDove

+3

Используйте это для PHP 7.1.x для извлечения целой строки в качестве объекта, если вам когда-либо понадобится получить более одного столбца. 'while ($ row = $ res-> fetch_object()) { $ myArray [] = $ row; } ' –

13

Как уже упоминалось, json_encode поможет вам. Самый простой способ - получить результаты, как вы это уже сделали, и создать массив, который можно передать в json_encode.

Пример:

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

$json Ваш будет регулярным массивом с каждым элементом в его собственном индексе.

В вашем предыдущем коде должно быть очень мало изменений, альтернативно, вы можете вернуть как XML, так и JSON, поскольку большая часть кода такая же.

+1

выборки доц для увеличения удовольствия. – Lodewijk

14

вот как я сделал мой фид 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

Если mysqlnd расширение установлен + включена в PHP, вы можете использовать:

$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() необходим mysqlnd драйвер для установки, прежде чем вы можете использовать его.

2

мне удалось запустить этот код:

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

Этот ответ, похоже, не добавляет ничего нового в другие ответы. Все остальные ответы, похоже, используют функцию json_encode –

Смежные вопросы