2010-07-28 139 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 2015-03-15 21:34:33

+3

如果您必须检索多个列,请将此用于PHP 7.1.x,以将整行作为对象检索。 'while($ row = $ res-> fetch_object()){$ myArray [] = $ row; }' – 2017-10-10 01:25:16

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 2014-08-12 00:33:06

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函数 – 2017-07-01 23:56:02