2014-06-28 4 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

, если вы храните array_push() вне цикла while, то он просто даст вам последний результат. –

+0

yes array_push будет в цикле while, это моя ошибка ввода. –

+0

Лучше отредактируйте свой ответ. В противном случае кто-то откажется от вашего ответа. @Sajid –

Смежные вопросы