PHP-将数据库结果放入数组并附加变量

时间:2019-04-01 21:41:11

标签: php json

我正在从数据库中提取记录,该记录能够以我想要的方式以JSON格式显示数据,并且效果很好。这里的问题是我在页面上生成了一个令牌,我想将其添加到用户获得的有效负载中,这就是我正在获得的

{"user_details":[{
                "id":"1",
                "fname":"xxx",
                "lname":"xxx Mensah",
                "phone_number":"0000000",
                "email":"yourmail@mail.com",
                "username":"xx",
                "password":"xx",
                "user_type":"xx"
                }],
"token":"xxxxx"}

但是我想得到这样的结果

[{"user_details":{
                "id":"1",
                "fname":"xxx",
                "lname":"xxx Mensah",
                "phone_number":"0000000",
                "email":"yourmail@mail.com",
                "username":"xx",
                "password":"xx",
                "user_type":"xx"
               },
"token":{"xxxxx"}
]

PHP

$token = xxxxx
$row = $conn->query("SELECT * from users where username='".$username."' and password='".$password."'");
$row->setFetchMode(PDO::FETCH_ASSOC);
$userdetails = $row->fetchAll(PDO::FETCH_OBJ);

$results = array(
    'user_details' => $userdetails,
    'token' => $token
);
echo json_encode(($results));

3 个答案:

答案 0 :(得分:1)

似乎期望的json无效(令牌部分),但是您可以拥有类似以下内容:

[{"user_details":{"id":"1","fname":"xxx","lname":"xxx Mensah","phone_number":"0000000","email":"yourmail@mail.com","username":"xx","password":"xx","user_type":"xx"}},{"token":"xxxxx"}]

代码:

$token = xxxxx;

$row = $conn->query("SELECT * from users where username='".$username."' and password='".$password."'");
$row->setFetchMode(PDO::FETCH_ASSOC);
$userdetails = $row->fetch(PDO::FETCH_OBJ);

$results = array(
    array(
        'user_details' => $userdetails
    ), 
    array(
        'token' => $token
    )
);
echo json_encode($results);

请注意,结果包装在另一个数组中,令牌在另一个数组中。

将fetchAll替换为fetch,因为您只需要一行,而不是所有行,对吗?

该示例可以帮助您了解如何构造数据以获得所需结果:

<?php

$array = array(
  array (
    'user_details' => 
      array (
        'id' => '1',
        'fname' => 'xxx',
        'lname' => 'xxx Mensah',
        'phone_number' => '0000000',
        'email' => 'yourmail@mail.com',
        'username' => 'xx',
        'password' => 'xx',
        'user_type' => 'xx',
      ),
  ),
  array(
      'token' => 'xxxxx'
  )
);

echo json_encode($array);

答案 1 :(得分:1)

对象的JSON编码字符串表示形式中的[]括号,而{}括号表示一个数组。因此,您的用户详细信息显示的是一个由键,值对组成的数组的对象。然后,您将得到一个包含所有内容,令牌和用户详细信息的数组。

我倾向于尝试以下方法:

$userdetails = $row->fetch(PDO::FETCH_OBJ);
$object = (object) ['userdetails' => $userdetails, 'token' => $token];
echo json_encode($results);

我还没有测试过,但应该足够接近。

答案 2 :(得分:-1)

您打错字了吗? 请尝试这个:

Tea