2014-06-28 43 views
0

這裏的情況是:保存MySQL查詢結果爲PHP數組

我有這個數組在PHP中,其目的是從查詢的結果保持數據:

$returnData = array(
    'ID'     => '', 
    'NAME'    => '', 
    'DESCRIPTION'  => '', 
    'STATUS'    => '', 
    'STATUS_DESCRIPTION' => '', 
    'LOCATION'   => '', 
    '_ERROR'    => '' 
); 

後來我執行一個查詢,我想填充這個數組:

$fetchResourceQuery = sprintf('SELECT RESOURCEID, RESOURCENAME, RESOURCEDESCRIPTION, 
              T3.RESOURCELOCATIONNAME, T2.RESOURCESTATUSNAME, 
              T2.RESOURCESTATUSDESCRIPTION 
            FROM resource   T1 
            JOIN resource_status T2 
            ON T1.RESOURCESTATUSID = T2.RESOURCESTATUSID 
            JOIN resource_location T3 
            ON T1.RESOURCELOCATIONID = T3.RESOURCELOCATIONID'); 

$resultSet = $DB->query($fetchResourceQuery); 
     if($resultSet){ 
      while($row = $resultSet->fetch_assoc()){ 
       $returnData['ID']     = $row['RESOURCEID']; 
       $returnData['NAME']     = $row['RESOURCENAME']; 
       $returnData['DESCRIPTION']   = $row['RESOURCEDESCRIPTION']; 
       $returnData['STATUS']    = $row['RESOURCESTATUSNAME']; 
       $returnData['STATUS_DESCRIPTION'] = $row['RESOURCESTATUSDESCRIPTION']; 
       $returnData['LOCATION']    = $row['RESOURCELOCATIONNAME']; 
      } 
      $json_data = json_encode($returnData, JSON_UNESCAPED_SLASHES); 
      echo $json_data; 
     } 

到目前爲止這是很好的。問題是,我覺得只有一個數據的同時,值得一內部循環被保存,然後將其覆蓋陣列出於某種原因裏面,輸出是這樣的:

{"ID":"456","NAME":"Rack con Televisor #1","DESCRIPTION":"Televisor Sharp Aquos con Laptop, armado en 2011.","STATUS":"Active","STATUS_DESCRIPTION":"Can be reserved.","LOCATION":"First Floor, High School","_ERROR":""} 

,因爲有5個資源這是壞在數據庫中,並且只有其中一個被存儲。

如何讓數組存儲多個值,如josn對象?由於顯然我現在嘗試的靈魂沒有工作。

回答

2

你確實是覆蓋在每次迭代的同一對象。你需要的是這樣的:

$returnData = array(); // Make it an array 

// ... 
// ... 

while($row = $resultSet->fetch_assoc()){ 
    $item = array(); 
    $item['ID']     = $row['RESOURCEID']; 
    $item['NAME']     = $row['RESOURCENAME']; 
    $item['DESCRIPTION']   = $row['RESOURCEDESCRIPTION']; 
    $item['STATUS']    = $row['RESOURCESTATUSNAME']; 
    $item['STATUS_DESCRIPTION'] = $row['RESOURCESTATUSDESCRIPTION']; 
    $item['LOCATION']    = $row['RESOURCELOCATIONNAME']; 

    $returnData[] = $item; // Add new item to array 
} 
+1

就實現了這個。謝謝。不能相信我沒有想到這個簡單的解決方法。只要我能夠標記答案,就會做到。謝謝! – codeninja

1

使用此:

$returnData = array(); // Simply do this. Don't need all index fields 
$index = 0; 
while($row = $resultSet->fetch_assoc()){ 
    $returnData[$index] = array("ID"=>$row['RESOURCEID'], 
    "NAME"=>$row['RESOURCENAME'],"DESCRIPTION"=>$row['RESOURCEDESCRIPTION'], 
    "STATUS"=>$row['RESOURCESTATUSNAME'],"STATUS_DESCRIPTION"=>$row['RESOURCESTATUSDESCRIPTION'], 
    "LOCATION"=>$row['RESOURCELOCATIONNAME']); 
    $index++; 
} 
echo json_encode($returnData, JSON_UNESCAPED_SLASHES); 
3
$save = array(); 
while($row = $resultSet->fetch_assoc()){ 
    $returnData['ID']     = $row['RESOURCEID']; 
    $returnData['NAME']     = $row['RESOURCENAME']; 
    $returnData['DESCRIPTION']   = $row['RESOURCEDESCRIPTION']; 
    $returnData['STATUS']    = $row['RESOURCESTATUSNAME']; 
    $returnData['STATUS_DESCRIPTION'] = $row['RESOURCESTATUSDESCRIPTION']; 
    $returnData['LOCATION']    = $row['RESOURCELOCATIONNAME']; 
    array_push($save, $returnData); 
} 
$json_data = json_encode($save, JSON_UNESCAPED_SLASHES); 
echo $json_data; 
0
$newArray = array(); 
while($row = $resultSet->fetch_assoc()){ 
      $returnData['ID']     = $row['RESOURCEID']; 
      $returnData['NAME']     = $row['RESOURCENAME']; 
      $returnData['DESCRIPTION']   = $row['RESOURCEDESCRIPTION']; 
      $returnData['STATUS']    = $row['RESOURCESTATUSNAME']; 
      $returnData['STATUS_DESCRIPTION'] = $row['RESOURCESTATUSDESCRIPTION']; 
      $returnData['LOCATION']    = $row['RESOURCELOCATIONNAME']; 

      array_push($newArray, $returnData); 
     } 
+0

如果你在while循環外面保存array_push(),那麼它只會給你最後的結果。 –

+0

是array_push會在while循環中,這是我的打字錯誤。 –

+0

更好地編輯你的答案。否則有人會投你的答案。 @Sajid –