2017-09-27 99 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 –