JSON编码MySQL结果


304

如何在json_encode()MySQL查询结果中使用该函数?我需要遍历行还是可以将其应用于整个结果对象?


1
我知道这是一个非常老的问题。但是没有人显示出最简单的方法来解决整数显示为字符串的问题。@mouckatron json_encode()在下面的答案中提供的JSON_NUMERIC_CHECK标志。简单,就像魅力!stackoverflow.com/questions/1390983/...
AlexGM

1
有关于字符串类型的问题,在一个匹配的问题+答案:stackoverflow.com/questions/28261613/...
马塞尔Ennix

Answers:


493
$sth = mysqli_query("SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

函数json_encode需要PHP> = 5.2和PHP-JSON包-如所提到的在这里

注意mysql自PHP 5.5.0起已弃用,请改用mysqli扩展名http://php.net/manual/en/migration55.deprecated.php


69
我建议您在选择查询期间使用该查询AS将列重命名为公共名称,例如SELECT blog_title as title,这样更干净,并且公众不知道数据库中确切的列是什么。
罗伯特·皮特(RobertPitt)2011年

14
此代码错误地将所有数字值编码为字符串。例如,一个名为score的mySQL数字字段的JSON值将为“ 12”而不是12(注意引号)。
西奥(Theo)

24
@RobertPitt,基于隐藏列名的安全性就是默默无闻的安全性
TMS

4
@Tomas是正确的,但是知道确切的列名会使SQL注入攻击变得更加容易
Tim Seguine

16
@Tim:如果您已经知道列名是您已经失去的SQL注入的唯一障碍,不是吗?
Paolo Bergantino

44

试试这个,这将正确地创建您的对象

 $result = mysql_query("SELECT ...");
 $rows = array();
   while($r = mysql_fetch_assoc($result)) {
     $rows['object_name'][] = $r;
   }

 print json_encode($rows);

1
+1这似乎是提供与json.org/example中的示例相同格式的JSON的唯一答案。
ban-geoengineering

是的,此示例每行提供一个键。
3

26

http://www.php.net/mysql_query说“ mysql_query()返回资源”。

http://www.php.net/json_encode表示它可以编码“除资源外”的任何值。

您需要遍历遍历并将数据库结果收集在一个数组中,然后在该数组中收集json_encode


2
mysql_query不返回结果集。这就是mysql_fetch *的目的。
安迪

嗯...是的...就是在mysql_query和json_encode之间进行迭代的过程。打个招呼,沃森。
休·博斯韦尔

17

谢谢,这对我帮助很大。我的代码:

$sqldata = mysql_query("SELECT * FROM `$table`");

$rows = array();
while($r = mysql_fetch_assoc($sqldata)) {
  $rows[] = $r;
}

echo json_encode($rows);

这将给我们一个包含的数组;1)一个空的方括号2)之后是包含我们返回结果行的花括号,这与其他行有何不同?
gumuruh 2012年

11

谢谢..我的回答是:

if ($result->num_rows > 0) {
            # code...
            $arr = [];
            $inc = 0;
            while ($row = $result->fetch_assoc()) {
                # code...
                $jsonArrayObject = (array('lat' => $row["lat"], 'lon' => $row["lon"], 'addr' => $row["address"]));
                $arr[$inc] = $jsonArrayObject;
                $inc++;
            }
            $json_array = json_encode($arr);
            echo $json_array;
        }
        else{
            echo "0 results";
        }

9

根据我的经验,在将数组中的根元素命名为某种东西之前,以上方法将无法工作,在此之前,我无法访问最终json中的任何东西。

$sth = mysql_query("SELECT ...");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows['root_name'] = $r;
}
print json_encode($rows);

这应该够了吧!

派尔


8

下面的代码在这里工作正常!

<?php

  $con=mysqli_connect("localhost",$username,$password,databaseName);

  // Check connection
  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query = "the query here";

  $result = mysqli_query($con,$query);

  $rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] = $r;
  }
  echo json_encode($rows);

  mysqli_close($con);
?>

5

我的简单解决办法是停止在数字值周围添加语音标记...

while($r = mysql_fetch_assoc($rs)){
    while($elm=each($r))
    {
        if(is_numeric($r[$elm["key"]])){
                    $r[$elm["key"]]=intval($r[$elm["key"]]);
        }
    }
    $rows[] = $r;
}   

5

抱歉,问题过了很久,但是:

$sql = 'SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]") 
AS json 
FROM users;'
$msl = mysql_query($sql)
print($msl["json"]);

基本上就是:

"SELECT" Select the rows    
"CONCAT" Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT" Returns a string with concatenated non-NULL value from a group

注意GROUP_CONCAT()受限制group_concat_max_len
eggyal

4

我们可以像这样简化Paolo Bergantino的答案

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));

4
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','dishant');

$con = mysqli_connect(HOST,USER,PASS,DB);


  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

 $sql = "select * from demo ";

 $sth = mysqli_query($con,$sql);

$rows = array();

while($r = mysqli_fetch_array($sth,MYSQL_ASSOC)) {

 $row_array['id'] = $r;

    **array_push($rows,$row_array);**
}
echo json_encode($rows);

mysqli_close($con);
?>

aarray_push($ rows,$ row_array); 帮助构建数组,否则它将在while循环中提供最后一个值

这项工作就像追加的方法的StringBuilder的java


3

使用FOR循环的另一种选择:

 $sth = mysql_query("SELECT ...");
 for($rows = array(); $row = mysql_fetch_assoc($sth); $rows[] = $row);
 print json_encode($rows);

唯一的缺点是for的循环要慢,例如while或尤其是foreach


3

例如$ result = mysql_query(“ SELECT * FROM userprofiles,其中NAME ='TESTUSER'”);

1.)如果$ result仅是一行。

$response = mysql_fetch_array($result);
echo json_encode($response);

2.)如果$ result超过一行。您需要迭代行并将其保存到数组中,并返回其中包含数组的json。

$rows = array();
if (mysql_num_rows($result) > 0) {
    while($r = mysql_fetch_assoc($result)) {
       $id = $r["USERID"];   //a column name (ex.ID) used to get a value of the single row at at time
       $rows[$id] = $r; //save the fetched row and add it to the array.
    }
}    
echo json_encode($rows);

3

我有同样的要求。我只想将结果对象打印为JSON格式,所以我使用下面的代码。希望您能在其中找到一些东西。

// Code of Conversion
$query = "SELECT * FROM products;";
$result = mysqli_query($conn , $query);

if ($result) {
echo "</br>"."Results Found";

// Conversion of result object into JSON format
$rows = array();
while($temp = mysqli_fetch_assoc($result)) {
    $rows[] = $temp;
}
echo "</br>" . json_encode($rows);

} else {
    echo "No Results Found";
}

3

检查以下代码以使用mysql_fetch和json_encode。您将需要遍历各行,但是如果使用mysqli,情况将会改变

$kt_query="SELECT * FROM tbl_xxx";
$kt_result = mysql_query($kt_query) or die('Query failed: ' . mysql_error());
$rows= array();
while($sonuc=mysql_fetch_assoc($kt_result))
{
    $rows[]=$sonuc;
}
print json_encode($rows);

3

我这样解决了

$stmt->bind_result($cde,$v_off,$em_nm,$q_id,$v_m);
    $list=array();
    $i=0;
    while ($cresult=$stmt->fetch()){    


        $list[$i][0]=$cde;
        $list[$i][1]=$v_off;
        $list[$i][2]=$em_nm;
        $list[$i][3]=$q_id;
        $list[$i][4]=$v_m;
        $i=$i+1;
    }
    echo json_encode($list);        

这将作为结果集并通过在javascript部分中使用json parse返回到ajax,如下所示:

obj = JSON.parse(dataX);

2
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');

while($row = mysql_fetch_array($sql_results))
{
    $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
    $subArray[x]=$row['x'];
    $subArray[y]=$row['y'];


 $array[] =  $subArray ;
}
echo'{"ProductsData":'.json_encode($array).'}';

2

码:

$rows = array();

while($r = mysqli_fetch_array($result,MYSQL_ASSOC)) {

 $row_array['result'] = $r;

  array_push($rows,$row_array); // here we push every iteration to an array otherwise you will get only last iteration value
}

echo json_encode($rows);


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.