gpt4 book ai didi

php - PHP/MySQLi 中的多个 SQL 对象

转载 作者:行者123 更新时间:2023-11-29 03:33:13 25 4
gpt4 key购买 nike

一段时间以来,我一直在 php 中使用多个 SQL 连接来避免“您现在无法运行此命令。命令不同步”错误。

我似乎不知道什么时候可以只使用一个连接,什么时候需要多个连接。以下代码是我如何从彼此相关的不同表中检索内容。

$sql 是连接到同一数据库的默认 mysqli 对象。 Example 是该问题的精简版本,没有实际用途,以防您感到疑惑。

$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:我找到了 two mysqli querys, one in a while loop - 但这将我的问题作为解决方案发布。

最佳答案

在一个 MySQL 连接中,您一次只能处理一个查询。您可以一次准备更多的语句(这些数据仍然保存在 MySQLi 驱动程序中),但是,一旦您使用 execute(),语句将被发送到数据库并且数据库将期望所有 future 的 bind_param() 和 bind_result() 请求是相同的声明,直到您发送新的声明。

同时有两个语句 => 到数据库的两个连接 => 两个 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();

关于php - PHP/MySQLi 中的多个 SQL 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com