【问题标题】:Save mysql query result into a PHP array将mysql查询结果保存到PHP数组中
【发布时间】:2014-06-28 04:44:23
【问题描述】:

情况如下:

我在 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 对象一样存储多个值?因为显然我现在正在尝试的灵魂是行不通的。

【问题讨论】:

    标签: php sql arrays json


    【解决方案1】:
    $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;
    

    【讨论】:

      【解决方案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
      }
      

      【讨论】:

      • 刚刚实现了这个。谢谢。不敢相信我没有想到这个简单的解决方法。只要我能够标记答案,就可以了。谢谢!
      【解决方案3】:

      使用这个:

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

      【讨论】:

        【解决方案4】:
        $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);
                }
        

        【讨论】:

        • 如果你将 array_push() 保留在 while 循环之外,那么它只会给你最后一个结果。
        • 是的,array_push 会在 while 循环中,这是我的输入错误。
        • 最好编辑你的答案。否则有人会否决您的答案。 @Sajid
        猜你喜欢
        • 2016-10-29
        • 2012-02-16
        • 2015-07-04
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        • 2021-05-29
        • 1970-01-01
        相关资源
        最近更新 更多