PDOStatement转换为JSON

40

如何将 PDOStatement 转换为 JSON?

我需要将 PDO::FETCH_OBJ 转成 JSON 格式。

json_encode 无法直接将 PDO::FETCH_OBJ 转为 JSON 格式。


你指的是哪个 PDOStatement - Anthony Forloney
5个回答

84

你可以使用内置的 PHP 函数 json_encode() http://php.net/manual/en/function.json-encode.php

要编码结果,可以使用类似下面的代码:

<?php
$pdo = new PDO("mysql:dbname=database;host=127.0.0.1", "user", "password");
$statement = $pdo->prepare("SELECT * FROM table");
$statement->execute();
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);

9
你刚才是不是对一个PDOStatement对象进行了json_encode操作? - Galen
1
是的,我做到了,当解码时返回一个stdClass对象。@mediaslave 你可以使用json_encode对PDO::FETCH_OBJ进行编码,当你运行PDO::FETCH_OBJ时,它会创建stdClass对象,这些对象可以被编码为JSON对象,然后解码为stdClass对象。对你的结果进行一些var_dumps并看看 :) - Rwky
2
PDO::FETCH_ASSOC非常重要,否则您将会得到重复的信息。 - mpgn
那么我们应该使用FETCH_OBJ还是FETCH_ASSOC? - frostshoxx
在我的情况下,我使用了带有排序规则utf8_unicode_ci的MySQL数据库。由于某种原因,json_encode告诉我,“格式不正确的UTF-8字符,可能是编码不正确”。我不得不将$results数组转换为Unicode(再次?),现在它可以正常工作了。 - Smamatti

12
使用PDOStatement的fetchAll()方法来检索一个值的数组,然后将其传递给json_encode()
$resultJSON = json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

5
$array = $statement->fetchAll( PDO::FETCH_ASSOC );
$json = json_encode( $array );

2

尝试这个,也许可以帮助你

 $data = array();
        if($stmt->execute()){
          while ($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
                $data['data'] = $row;
            }
          }
      }
    
    if(!empty($data)){
        header("Access-Control-Allow-Origin: *");//this allows cors
        header('Content-Type: application/json');
        print json_encode($data);
    }else{
      echo 'error';
    }

2

我也发现在通过json_encode()返回JSON对象之前插入并设置PHP头文件('Content-Type: application/json')非常有用。


1
这并没有回答问题,而且,在解码之前设置那个头部有什么帮助呢?如果您能解释一下,那么它可以作为评论(甚至是编辑)放在被接受的答案中。 - Jhuliano Moreno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接