获取所有记录json_encode

时间:2016-07-19 04:58:03

标签: php mysql pdo

我正在尝试以json格式从表1中获取所有数据。

$arr = array();
$sql = "SELECT * FROM table1 ORDER BY price DESC";
$statement = $connect->prepare($sql);
$statement->execute();
$result = $statement->fetchAll();

foreach ($result as $val){
    $arr['id'] = $val['item'];
    $arr['price'] = $val['price'];
}
echo json_encode($arr);

结果:

{"id":"item00125","price":"112.35"}

问题是我只得到一条记录。为什么foreach(){没有发送所有记录?

4 个答案:

答案 0 :(得分:5)

尝试:

foreach ($result as $val){
 $arr[] = array(
  "id" => $val['item'],
  "price" => val['price']
 );
}

答案 1 :(得分:2)

那是因为你的数组每次都被覆盖了。

试试这个:

$i = 0;
foreach ($result as $val){
   $arr[$i]['id'] = $val['item'];
   $arr[$i]['price'] = $val['price'];
   $i++;
}   
echo json_encode($arr);

答案 2 :(得分:1)

你只得到一个结果,因为你在循环

的每一次迭代时都会覆盖数组键

只需将结果集传递给json_encode而不使用循环

$statement->execute();
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
$json=json_encode($results);

答案 3 :(得分:1)

此处您的结果变量获取所有记录,但问题出在for each循环中,您将每个值放在[' id']和[' price']的位置所以每次循环都将值放在同一个位置,所以意味着替换值,这样你就得到了最后一个值,所以我必须把每个记录放在不同的位置,如下所示:

$i = 0;
foreach ($result as $val)
{
    $arr[$i]['id'] = $val['item'];
    $arr[$i]['price'] = $val['price'];
    $i++; 
}   
echo json_encode($arr);

我希望它运作良好