Php Foreach Station仅显示数据库中的1条记录,而不是假定的数量

Php Foreach Station仅显示数据库中的1条记录,而不是假定的数量,php,Php,我正在从数据库中选择行。当我打印时,它显示3条记录,但在我的第二个foreach中,它只显示1条记录 //get productid $product = $database->prepare("SELECT * FROM bids,orders,products WHERE bids.bids_username=? AND NOW() > products.enddate AND orders.orders_status=0 GROUP BY bids.

我正在从数据库中选择行。当我打印时,它显示3条记录,但在我的第二个foreach中,它只显示1条记录

      //get productid
        $product = $database->prepare("SELECT * FROM bids,orders,products WHERE bids.bids_username=? AND NOW() > products.enddate AND orders.orders_status=0 GROUP BY bids.bids_item ORDER BY bids.bids_amount DESC");
        $product->execute(array($username->username));
        $productid = $product->fetchAll();

        print_R($productid);
        //check if order is in database
        foreach($productid as $product):
            $order = $database->prepare("SELECT * FROM orders WHERE orders_product=? AND orders_username=?");
            $order->execute(array($product->bids_item, $username->username));
            $result = $order->fetchAll();
        endforeach;

        //insert order
        if(!$result):
        $createorder = $database->prepare("INSERT INTO orders(orders_username,orders_product,orders_firstname, orders_lastname, orders_address1, orders_address2, orders_zipcode, orders_city, orders_country, orders_btcaddress, orders_status) VALUES(?,?,?,?,?,?,?,?,?,?,?)");
        foreach($productid as $product):
        echo  $product->bids_item;
               //get btc address, check it's valid, then if isset run query below
               $createorder->execute(array($username->username, $product->bids_item, $username->firstname, $username->lastname, $username->address1, $username->address2, $username->zipcode, $username->city, $username->country, 'jkjkjk', 0));
               return 1;
        endforeach;
        endif;

当我回显bids\u项目时,它只显示1个结果,而它应该遍历所有3个并回显所有结果。我的代码中有什么看起来不正确的地方吗?

在第二个foreach中,只需替换

$result[] = $order->fetchAll();

您将收到一个数组。当前您正在覆盖foreach循环的下一个值。如果需要,请在下一个foreach中执行同样的操作。

错误在第二个foreach循环中

foreach($productid as $product):
    echo  $product->bids_item;
    //get btc address, check it's valid, then if isset run query below
    $createorder->execute(array($username->username, $product->bids_item, $username->firstname, $username->lastname, $username->address1, $username->address2, $username->zipcode, $username->city, $username->country, 'jkjkjk', 0));
   return 1;
endforeach;
return语句导致所有执行停止第一次运行。删除return语句,它将按预期运行。

返回1;在显示记录后在循环内部,因此它不会继续迭代后续记录的循环,而是返回到调用代码