0

It echoes only the last review_id with value 76 like:

[{
    "category":"whatever",
    "name":"whatever",
    "phone":"whatever",
    "comment":"whatever",
    "reviewid":76
}]

But it should be echoing:

[
    {
        "category":"whatever",
        "name":"whatever",
        "phone":"whatever",
        "comment":"whatever",
        "reviewid":32
    },
    {
        "category":"whatever",
        "name":"whatever",
        "phone":"whatever",
        "comment":"whatever",
        "reviewid":76
    }
]

Here's my code. I looked at other posts on SO and can't see what I'm doing so different.

 <?php
    require('file.php');
    $ReviewIDs = array("32","76");
    foreach($ReviewIDs as $ReviewID) {
        $sql2 = "SELECT * FROM review WHERE review_id = ?";
        $stmt2 = $con->prepare($sql2) or die(mysqli_error($con));
        $stmt2->bind_param('i', $ReviewID) or die ("MySQLi-stmt binding failed ".$stmt2->error);
        $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
        $result2 = $stmt2->get_result();
        $results = array();
        while($row = mysqli_fetch_array($result2)) {//make an array called $results
            $results[] = array(
                'category' => $row['cat_name'],
                'name' => $row['name'],
                'phone' => $row['phone'],
                'comment' => $row['comment'],
                'reviewid' => $row['review_id'],
            );
        }
    }
    $json = json_encode($results);
    echo $json;
?>
GYaN
  • 2,327
  • 4
  • 19
  • 39
CHarris
  • 2,693
  • 8
  • 45
  • 71

1 Answers1

4

$results = array(); must be defined before foreach starts. Otherwise it gets overwritten on each foreach iteration.

u_mulder
  • 54,101
  • 5
  • 48
  • 64