Trong một kết nối MySQL, bạn chỉ có thể làm việc với một truy vấn tại thời điểm đó. Bạn có thể chuẩn bị nhiều câu lệnh hơn cùng một lúc (những dữ liệu này vẫn được giữ trong trình điều khiển MySQLi), tuy nhiên, khi bạn sử dụng execute (), câu lệnh sẽ được gửi đến cơ sở dữ liệu và cơ sở dữ liệu sẽ yêu cầu tất cả các yêu cầu bind_param () và bind_result () trong tương lai cùng một câu lệnh, cho đến khi bạn gửi một câu lệnh mới.
Hai câu lệnh cùng lúc => hai kết nối đến DB => hai đối tượng mysqli.
Ngoài ra, vấn đề của bạn có thể được giải quyết trong một truy vấn như:
$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();