2016-01-13 109 views
1

我在數據庫的一行中存儲了一個JSON數據數組,並試圖檢索數組以便在foreach循環中使用。PHP PDO從數據庫中檢索json數組 - 刪除不需要的字符

下面的代碼是我將用於foreach循環的代碼,但我有一些麻煩,實際上是使用PDO根據需要檢索數據。

$data = '[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]'; 
$array = json_decode($data, true); 
foreach($array as $data){ 
    echo $data['id']; 
} 

我遇到的問題是檢索陣列投入使用$data PDO。目前我有這個查詢和代碼,其輸出如下。

$statement = $this->db_connection->prepare("SELECT gp FROM gs WHERE c_s= :c_s"); 
       $statement->bindParam(':c_s', $c_s); 
       $statement->execute(); 
       $data = $statement->fetchAll(); 
$result = json_encode($data, true); 
       return $result; 

混合用下面的代碼來顯示數組:

foreach ($result as $key) { 
      echo $key['id']; 
     } 

     print_r($result); 
     die(); 

這爲針對每個錯誤,並輸出陣列(不可用)如下:

[{"gp":"[{\"id\":\"H592736029375\"},{\"id\":\"K235098273598\"},{\"id\":\"B039571208517\"}]","0":"[{\"id\":\"H592736029375\"},{\"id\":\"K235098273598\"},{\"id\":\"B039571208517\"}]"}] 

作爲我有的第一部分代碼,我可以根據需要使用這些數據我只需要一些關於如何從數據庫中正確獲取數組然後在foreach中使用的指導。

我知道,我目前使用json_encode代替json_decode,使用json_decode提供了以下錯誤:

Warning: json_decode() expects parameter 1 to be string, array given 

建議我的錯誤,將不勝感激

回答

4

fetchAll()返回行的數組,而不是單一的領域,你希望:

$statement = $this->db_connection->prepare("SELECT gp FROM gs WHERE c_s= :c_s"); 
$statement->bindParam(':c_s', $c_s); 
$statement->execute(); 
$rows = $statement->fetchAll(); 
$data = $rows[0]['gp']; 
$result = json_decode($data); 
1

你期待$data到是一個字符串,而它是一個數組。要麼使用$statement->fetchColumn()來檢索單個字段,要麼使用json_decode($data['gp'])

除此之外,我不確定你爲什麼要循環訪問json_encoded數組,你不能這麼做。

  • json_encode()爲javascript對象表示法設置格式變量。
  • json_decode()以JavaScript對象表示法從字符串加載變量(READ:字符串,而不是數組)。

爲了使它更加清晰:

  • 使用json_encode()在MySQL中插入數據。
  • 使用json_decode()將一列放回到它們相應的php變量/狀態。
+0

感謝錯字改正:) –