php get json item return wrong

时间:2017-09-27 08:05:36

标签: php json

我的php(更新)代码如下:

$ sql =" INSERT INTO uac_user(user_name,user_password,create_time,lastupdateTime)VALUES(' $ usernmae',' $ password',NOW(),NOW( ))&#34 ;;

if ($conn->query($sql) === TRUE) {
    $last_id = $conn->insert_id; //get new id
    $records = array();  //select role
    if($result = $conn->query("SELECT role_id FROM uac_role WHERE `role_name` = '$role';")){
        if($result->num_rows){
            while ($row = $result->fetch_object()){
                $records = $row;
            }
            $dateResult=(string)json_encode($records);
            echo ($dateResult);
            echo ($dateResult['role_id']);
            // $sql2 = "INSERT INTO uac_mapping (role_id, user_id) VALUES ('$dateResult['role_id']', '$last_id')"; //insert mapping
            // if ($conn->query($sql2) === TRUE) {
                // echo "success"; 
            // }
            // else {
                // echo "Error: " . $sql . "<br>" . $conn->error;
            // }
        }
        else $records = 'no data';
    }
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
die();

第一个回声[{&#34; role_id&#34;:&#34; 4&#34;}]

但第二次回归[

我需要的第二个是4

我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

我认为你犯了一个常见的错误,即混淆JSON是什么,不是什么。 JSON是一种表示字符串中某些数据的方式,用于传输到另一个系统,在那里它将被转换回其他系统以供使用。 JSON是不是一种可以直接用于提取数据的对象。

仔细看看这一行:

$dateResult=(string)json_encode($records);

结果是$dateResult是一个字符串 - 你甚至还有一个额外的(string),但即使没有the manual page for json_encodedocs也会明确表示你总会有一个字符串:< / p>

  

返回包含所提供值的JSON表示的字符串。

然后运行:

$dateResult[role_id]

您正在尝试在字符串中查找role_id 。但是字符串只是一堆符号,它不知道&#34; role_id&#34;是。您已在$records中构建了数据结构,您希望在其中查找role_id

如果$records是一个数组,你想要的是$records['role_id'](请注意'role_id'周围的引号; role_id将是常量的名称,而不是字符串)

如果$records是一个对象,你想要的是$records->role_id(这次没有引号,因为->role_id更像是变量名而不是字符串。)

答案 1 :(得分:0)

你的json可能是一个对象数组,所以你可以遍历它们并使用类似的东西:

echo $dateResult[$counter]->role_id;
//$counter will be your loop incrementer;