一段时间以来,我一直在 php 中使用多个 SQL 连接来避免“您现在无法运行此命令。命令不同步”错误。
我似乎无法弄清楚何时只能使用一个连接以及何时需要多个连接。以下代码是我如何从彼此相关的不同表中检索内容的方法。
The $sql
s 是连接到同一数据库的默认 mysql 对象。如果您想知道,示例是问题的简化版本,没有任何实际用途。
$stmt1 = $sql1->prepare ('SELECT orderid,date FROM orders');
$stmt2 = $sql2->prepare ('SELECT product,price FROM orderlines WHERE orderid= ?');
$stmt1->execute();
$stmt1->bind_result($orderid,$date);
while ($stmt1->fetch()) {
echo "Order ID: " . $orderid . " from date: " . $date . ":<br>";
$stmt2->bind_param("i",$orderid);
$stmt2->execute();
$stmt2->bind_result($product, $price);
while ($stmt2->fetch() {
echo "Product from order is: " . $product . " and costs " . $price . "<br>";
}
echo "End of order " . $orderid;
}
$stmt1->close();
$stmt2->close();
$sql1->close();
$sql2->close();
这有效,但前提是我不使用相同的 mysqli 对象。如果我尝试只用一个共同点来完成这两项工作$sql
对象,第二个 stmt 的结果仍然为空。
所以问题是:这种情况应该发生吗?上述方法是好是坏?
我对此没有任何问题 - 一切都运行得非常好,但是完成此操作的方式对我来说似乎很奇怪,并且我找不到有关此特定问题的任何信息。
编辑:用订单和订单行更新了问题示例,以显示发生这种情况的位置。
编辑2:我发现两个 mysql 查询,一个在 while 循环中 https://stackoverflow.com/questions/19916570/two-mysqli-querys-one-in-a-while-loop?rq=1- 但这将我的问题作为解决方案。