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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Windows 手机将 Json 数据发送到服务器 [关闭]
警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parame
PHP PDOStatement:获取一行,作为数组的键的第一列[重复]