json_encode截断从mysql数据库

时间:2015-07-17 14:45:34

标签: php mysql json

我正在使用MySql作为数据库引擎在PHP 5.6.8中开发Web应用程序。

在我验证用户身份以获取适当凭据的方法中,我正在调用数据库并检索用户对象。功能代码是:

function getBoosterDetails($patientId){
       $dbConnection = new Database();

       $sql = "SELECT * from users where id = :patientId";
       try {
           $db = $dbConnection->getConnection();
           $stmt = $db->prepare($sql);
           $stmt->bindParam("patientId", $patientId);
           $stmt->execute();
           $userDetails = $stmt->fetchAll(PDO::FETCH_OBJ);
           $db = null;
           $_SESSION['userDetails'] = $userDetails;

           echo '{"user": ' . json_encode($userDetails) . '}';


       } catch(PDOException $e) {
           echo '{"error":{"text":'. $e->getMessage() .'}}'; 
       } catch(Exception $e1) {
           echo '{"error11":{"text11":'. $e1->getMessage() .'}}'; 
       } }

对于任何有效输入,我一直收到对象无效的错误。我尝试在Advanced Rest Client Chrome插件中检查userDetails对象。我观察到的是,当对象的var转储具有整个对象数据时,json_encode的回显具有截断,如下图所示。

![在此处输入图片说明] [1]

我已经设置了Apache&带有XAMPP的MySql服务器(之前也尝试过使用MAMP并遇到相同的结果。)

// this is the var_dump
    stdClass object
(
    [username]  => pavan
    [rolename]  => Patient
    [userid]  => 5
)

//this is the json_encode echo output
{"user": [{"username":"pavan", "rolename":"Patient", "userid":

内容在json编码时被截断 你能帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

不要包装json-in-json。那是对的。

用您的宿主语言(例如php)构建一个SINGLE数据结构,然后编码整个结构:

$data = array(
   'user' => $userDetails
);
$json = json_encode($data);

您的代码正在生成语法上的ILLEGAL json ...

   echo '{"user":' . json_encode($userDetails) . '}}';**
         ^--open #1                               ^--close #1
                                                   ^--close #2

这个#2大括号是什么?如果你完成了单结构编码,那就不可能了。

答案 1 :(得分:0)

您可以尝试使用以下代码而不是现有代码吗?

我们刚刚将PDO :: FETCH_OBJ更改为PDO :: FETCH_ASSOC,它返回数组格式。

更新的代码:

function getBoosterDetails($ patientId){        $ dbConnection = new Database();

   $sql = "SELECT * from users where id = :patientId";
   try {
       $db = $dbConnection->getConnection();
       $stmt = $db->prepare($sql);
       $stmt->bindParam("patientId", $patientId);
       $stmt->execute();
       $userDetails = $stmt->fetchAll(PDO::FETCH_ASSOC);
       $db = null;
       $_SESSION['userDetails'] = $userDetails;

       echo '{"user": ' . json_encode($userDetails) . '}';


   } catch(PDOException $e) {
       echo '{"error":{"text":'. $e->getMessage() .'}}'; 
   } catch(Exception $e1) {
       echo '{"error11":{"text11":'. $e1->getMessage() .'}}'; 
   } }