我正在使用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编码时被截断 你能帮我解决这个问题。
答案 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() .'}}';
} }