2017-09-27 69 views
0

我有我的PHP(更新)下面的代码:PHP获得JSON项目回报错误

$ SQL =“INSERT INTO uac_user(USER_NAME,USER_PASSWORD,CREATE_TIME,lastupdateTime)VALUES( '$ usernmae',“$密码“,NOW(),NOW())”;

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(); 

第一回波返回[{ “ROLE_ID”: “4”}]

但第二返回[

我所需要的第二个是4

是什么关于我的代码的问题?

+0

完全按照原样添加'$ records'数组。以这种方式查明问题更容易。 – Andrew

回答

1

我想你已经困惑什么是JSON而不是一个常见的错误。 JSON是一种表示字符串中的某些数据的方式,用于传输到另一个系统,在那里它将被转换回其他用途。 JSON是而不是可直接用于提取数据的对象类型。仔细此行

看:

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

这样做的结果是,$dateResult是一个字符串 - 你甚至有一个额外的(string),但即使没有,the manual page for json_encode明确指出,你将永远有一个字符串:

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

然后运行这个:

$dateResult[role_id] 

您正在试图查找role_id字符串内。但是一个字符串只是一堆符号,它不知道“role_id”是什么。您的结构化数据为$records,您要查找role_id

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

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

+0

我刚刚更新了代码,$记录是一个数组 我已经尝试了'role_id'; role_id但它不起作用 –

+0

@WaiHung再次阅读我的答案。在这里你不需要'json_encode',你不需要'$ dateResult',你不需要任何与JSON有关的事情。此外,函数名称“fetch_object”应该给你一个线索,它将返回的实际上是一个对象。 – IMSoP

+0

我只使用echo($ records-> role_id);它的工作原理。非常感谢 –

0

您的JSON可能是对象的数组,这样你就可以循环遍历它们,并使用类似:

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

但它不返回4 –