В една MySQL връзка можете да работите само с една заявка в даден момент. Можете да подготвите повече оператори наведнъж (тези данни все още се съхраняват в драйвера на MySQLi), но след като използвате execute(), операторът ще бъде изпратен до базата данни и базата данни ще очаква всички бъдещи заявки bind_param() и bind_result() да бъдат от същото извлечение, докато не изпратите ново извлечение.
Два оператора едновременно => две връзки към DB => два mysqli обекта.
Освен това проблемът ви може да бъде решен с една заявка като:
$stmt1 = $sql1->prepare ('SELECT o.orderid,o.date,b.product,b.price FROM orders o LEFT JOIN orderlines b ON b.orderid=o.orderid ORDER BY o.orderid');
$stmt1->execute();
$stmt1->bind_result($orderid,$date,$product,$price);
$prev_order_id=false;
while ($stmt1->fetch())
{
if($prev_order_id!=$orderid)
{
if($prev_order_id!==false)
echo "End of order " . $prev_orderid."<br>";
echo "Order ID: " . $orderid . " from date: " . $date . ":<br>";
}
if(is_null($product))
echo "Product from order is: " . $product . " and costs " . $price . "<br>";
$prev_order_id=$orderid;
}
if($prev_order_id!==false)
echo "End of order " . $prev_orderid."<br>";
$stmt1->close();
$sql1->close();