PDOStatement 到 JSON [关闭]

Posted

技术标签:

【中文标题】PDOStatement 到 JSON [关闭]【英文标题】:PDOStatement to JSON [closed] 【发布时间】:2011-02-15 18:00:00 【问题描述】:

如何将PDOStatement 转换为 JSON?

我需要将 PDO::FETCH_OBJ json 化。

json_encode 无法将PDO::FETCH_OBJ json 化。

【问题讨论】:

你指的是哪个PDOStatement 【参考方案1】:

可以使用内置的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);

【讨论】:

您只是对 PDOStatement 对象进行了 json_encode 编码吗? 是的,我做了哪种工作,解码时它返回一个 stdClass 对象。 @mediaslave 您可以在 PDO::FETCH_OBJ 上使用 json_encode,当您运行 PDO::FETCH_OBJ 时,它会创建 stdClass 的对象,然后可以将这些对象编码为 json 对象,然后再解码回 stdClass 对象。对你的结果做一些 var_dumps 看看:) PDO::FETCH_ASSOC 非常重要,否则您将获得双重信息 那么我们应该使用 FETCH_OBJ 还是 FETCH_ASSOC? 在我的例子中,我使用了带有排序规则 utf8_unicode_ci 的 MySQL 数据库。出于某种原因,json_encode 告诉我,Malformed UTF-8 characters, possibly incorrectly encoded。我必须将 $results 数组转换为 unicode(再次?),现在它正在工作。【参考方案2】:

使用 PDOStatement 的 fetchAll() 方法检索值数组,然后将其传递给 json_encode()

$resultJSON = json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

【讨论】:

【参考方案3】:
$array = $statement->fetchAll( PDO::FETCH_ASSOC );
$json = json_encode( $array );

【讨论】:

【参考方案4】:

我还发现在发送回 json_encode() 返回的 JSON 对象之前插入和设置 PHP 标头('Content-Type: application/json')非常有用

【讨论】:

这不能回答问题,而且,在进行解码之前设置该标头有什么帮助?如果您能解释它可能适合已接受答案中的评论(甚至编辑)。【参考方案5】:

试试这个可能对你有帮助

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

【讨论】:

以上是关于PDOStatement 到 JSON [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 登录后显示个人资料页面 [关闭]

使用 Windows 手机将 Json 数据发送到服务器 [关闭]

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parame

PHP PDOStatement:获取一行,作为数组的键的第一列[重复]

如何在 PDOStatement::bindValue() 中定义变量类型?

php之bindValue和bindParam的区别