JSON编码MySQL结果

时间:2008-12-20 19:09:44

标签: php mysql json

如何将json_encode()函数与MySQL查询结果一起使用?我是否需要遍历行或者是否可以将其应用于整个结果对象?

23 个答案:

答案 0 :(得分:474)

$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 包 - 如上所述here

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

答案 1 :(得分:42)

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

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

 print json_encode($rows);

答案 2 :(得分:25)

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

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

您需要迭代并在数组中收集数据库结果,然后json_encode数组。

答案 3 :(得分:16)

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

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

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

echo json_encode($rows);

答案 4 :(得分:10)

谢谢..我的回答是:

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";
        }

答案 5 :(得分:8)

根据我的经验,在命名根元素之前,上述操作不起作用 在数组中的东西,我一直无法访问任何东西 在那之前的最后一个json。

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

这应该可以做到!

PAR

答案 6 :(得分:7)

以下代码在这里运行正常!

<?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);
?>

答案 7 :(得分:4)

对不起,这个问题过了很长时间,但是:

$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

答案 8 :(得分:4)

我的简单修复就是阻止它将语音标记放在数字值周围......

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

答案 9 :(得分:3)

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

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

答案 10 :(得分:3)

如何使用MySQL数据库中的数据创建JSON

JSON(JavaScript Object Notation)现在比XML更受欢迎,因为它轻巧,易读且易于管理,可以跨各种平台交换数据。 我们将看到如何从存储在MySQL数据库中的Employee表创建JSON数据。

 echo json_encode($data);

直播: [Example]

答案 11 :(得分:3)

DWORD

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

这项工作类似于 java

中的追加 StringBuilder 方法

答案 12 :(得分:2)

例如 $ 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);

答案 13 :(得分:2)

使用FOR循环的另一个选项:

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

唯一的缺点是循环比较慢,例如虽然或特别是foreach

答案 14 :(得分:2)

我这样解决了

$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);		
这将作为结果集返回到ajax 并在javascript部分中使用json parse:

obj = JSON.parse(dataX);

答案 15 :(得分:2)

我有同样的要求。我只想将结果对象打印成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";
}

答案 16 :(得分:2)

使用PDO时

使用fetchAll()来获取所有行作为关联数组。

$stmt = $pdo->query('SELECT * FROM article');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

当您的SQL具有参数时:

$stmt = $pdo->prepare('SELECT * FROM article WHERE id=?');
$stmt->execute([1]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

当您需要重新键入表的密钥时,可以使用foreach循环并手动构建阵列。

$stmt = $pdo->prepare('SELECT * FROM article WHERE id=?');
$stmt->execute([1]);

$rows = [];
foreach ($stmt as $row) {
    $rows[] = [
        'newID' => $row['id'],
        'Description' => $row['text'],
    ];
}

echo json_encode($rows);

使用mysqli时

使用fetch_all()来获取所有行作为关联数组。

$res = $mysqli->query('SELECT * FROM article');
$rows = $res->fetch_all(MYSQLI_ASSOC);
echo json_encode($rows);

当SQL具有参数时,您需要执行prepare / bind / execute / get_result。

$id = 1;
$stmt = $mysqli->prepare('SELECT * FROM article WHERE id=?');
$stmt->bind_param('s', $id); // binding by reference. Only use variables, not literals
$stmt->execute();
$res = $stmt->get_result(); // returns mysqli_result same as mysqli::query()
$rows = $res->fetch_all(MYSQLI_ASSOC);
echo json_encode($rows);

当您需要重新键入表的密钥时,可以使用foreach循环并手动构建阵列。

$stmt = $mysqli->prepare('SELECT * FROM article WHERE id=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$res = $stmt->get_result();

$rows = [];
foreach ($res as $row) {
    $rows[] = [
        'newID' => $row['id'],
        'Description' => $row['text'],
    ];
}

echo json_encode($rows);

使用mysql_ * API时

请尽快升级到受支持的PHP版本!请认真对待。如果您需要使用旧API的解决方案,可以通过以下方式完成:

$res = mysql_query("SELECT * FROM article");

$rows = [];
while ($row = mysql_fetch_assoc($res)) {
    $rows[] = $row;
}

echo json_encode($rows);

答案 17 :(得分:1)

$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).'}';

答案 18 :(得分:1)

代码:

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

答案 19 :(得分:1)

使用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);

答案 20 :(得分:0)

$rows = json_decode($mysql_result,true);

就这么简单: - )

答案 21 :(得分:0)

B"H

考虑到 mysql 中通常没有任何 NESTED json 对象等,制作自己的编码函数相当容易

首先,在一个数组中检索mysqli结果的函数:

function noom($rz) {
    $ar = array();
    if(mysqli_num_rows($rz) > 0) {
        while($k = mysqli_fetch_assoc($rz)) {
            foreach($k as $ki=>$v) {
                $ar[$ki] = $v;
            }
        }
    }
    return $ar;
}

现在,函数将数组编码为 json:

function json($ar) {
    $str = "";
    $str .= "{";
    $id = 0;
    foreach($ar as $a=>$b) {
        $id++;
        $str .= "\"".$a."\":";
        if(!is_numeric($b)) {
            $str .= "\"".$b."\"";
        } else {
            $str .= $b;
        }
        
        if($id < count($ar)) {
            $str .= ",";
        }
    }
    $str .= "}";
    return $str;
}

然后使用它:

<?php
$o = new mysqli(
    "localhost",
    "root",""
);
if($o->connect_error) {
    echo "DUDE what are you/!";
} else {
    $rz = mysqli_query($o,
        "SELECT * FROM mydatabase.mytable"
    );
    $ar = noom($rz);
    echo json($ar);
}
?>

答案 22 :(得分:-1)


$sql = "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', tbl.id)) FROM table tbl WHERE... "; 

//And get first row :)