当前位置:  开发笔记 > 编程语言 > 正文

JSON编码MySQL结果

如何解决《JSON编码MySQL结果》经验,为你挑选了9个好方法。

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



1> Paolo Bergan..:
$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.


我建议您在选择查询期间使用`AS`将列重命名为公共内容,例如`SELECT blog_title as title`,这是更清晰的,公众不知道确切的列是什么来自数据库.
@RobertPitt,基于隐藏列名称的安全性是[默默无闻](http://en.wikipedia.org/wiki/Security_through_obscurity)!
@Tim:如果你已经到了你所知的列名是SQL注入的唯一障碍,你已经输了,不是吗?
此代码错误地将所有数值编码为字符串.例如,名为score的mySQL数字字段的JSON值为"12"而不是12(注意引号).
@Tomas是的,但是知道确切的列名会使SQL注入攻击变得更加容易
您可以使用我的课程:http://ajaxian.com/archives/php-based-mysql-to-json-converter
@Theo有关字符串类型问题的匹配问题+答案:http://stackoverflow.com/questions/28261613/convert-mysql-result-to-json-with-correct-types

2> ddavtian..:

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

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

 print json_encode($rows);



3> Hugh Bothwel..:

http://www.php.net/mysql_query说" mysql_query()返回资源".

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

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


mysql_query不返回结果集.这就是mysql_fetch*的用途.

4> 小智..:

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

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

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

echo json_encode($rows);



5> aashima..:

谢谢......我的回答是:

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



6> 小智..:

根据我的经验,在将数组中的根元素命名为某些内容之前,上述操作无效,在此之前我无法访问最终json中的任何内容.

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

这应该够了吧!

平价



7> 小智..:

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




8> James..:

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

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> 小智..:

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

$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

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有