【问题标题】:Executing Multiple Statements From Multiple Databases从多个数据库执行多个语句
【发布时间】:2017-12-30 00:25:50
【问题描述】:

数据库 1:

<?php
    $servername = "localhost";
    $dbname = "root";
    $dbpassword = "";
    $name = "one";

    $db_one = new mysqli($servername, $dbname, $dbpassword, $name);

    if ($db_one->connect_error) {
        die("We are likely experiencing a heavy traffic load, please come back later!");
    }
    ?>

数据库 2:

<?php
$servername = "localhost";
$dbname = "root";
$dbpassword = "";
$name = "two";

$db_one = new two($servername, $dbname, $dbpassword, $name);

if ($db_one->connect_error) {
    die("We are likely experiencing a heavy traffic load, please come back later!");
}
?>

我尝试的代码:

<?php require("db.php"); ?>

<?php //Select All Orders
$stmt = $db_one->prepare("SELECT * FROM `one`");
$stmt = $db_one->prepare("SELECT * FROM `one_table2`");
$stmt = $db_two->prepare("SELECT * FROM `two`");
$stmt->execute();

$result = $stmt->get_result();
if($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {

    echo $one[] = "<tr><td>".$row["fromdbone"]."</td>";
    echo $two[] = "<td>".$row["fromdbtwo"]."</td>";
    echo $three[] = "<td>".$row["fromdbone_table2"]."</td></tr>";
  }
}
$stmt->close();
?>

大家好,我在这里不知所措,我将如何从不同的表和数据库执行多个查询以便将它们全部放入一个表中?

非常感谢您的洞察力,我相信你们都比我聪明!

编辑:或者如果我要进行多重查询,我如何将它们全部放入一个 HTML 表中?

谢谢,我已经尝试了好几个小时,希望您能提供帮助!

【问题讨论】:

  • 什么是$db_bans?脚本设置$db_one$db_two
  • 您需要将每个准备好的语句分配给不同的变量。否则你只会执行最后一个查询。
  • 但您可能应该在单个查询中加入这些表。很难说你想做什么。
  • @Barmar 我现在编辑了对不起,我从我已经工作的系统中获取了这段代码,并将其更改为一个示例
  • 您不需要为每个数据库使用不同的连接。您可以使用前缀访问不同数据库中的表:SELECT * FROM two.two

标签: php mysql mysqli prepared-statement


【解决方案1】:

由于两个数据库位于同一台服务器 (localhost) 上,因此您无需为它们使用不同的连接。使用单个连接,并连接所有表。可以使用数据库前缀访问不在默认数据库中的表。

$stmt = $db_one->prepare("SELECT * FROM one AS o
    JOIN one_table2 AS o2 ON o.id = o2.one_id
    JOIN two.two AS t ON o.id = t.one_id");
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo $one[] = "<tr><td>".$row["fromdbone"]."</td>";
    echo $two[] = "<td>".$row["fromdbtwo"]."</td>";
    echo $three[] = "<td>".$row["fromdbone_table2"]."</td></tr>";
  }
}
$stmt->close();

要多条语句,需要绑定参数。

$stmt1 = $db_one->prepare("SELECT * FROM `one`");
$stmt2 = $db_one->prepare("SELECT * FROM `one_table2` WHERE one_id = ?");
$stmt3 = $db_two->prepare("SELECT * FROM `two` WHERE one_id = ?");

$stmt2->bind_param("i", $one_id);
$stmt3->bind_param("i", $one_id);

$stmt1->execute();
$result1 = $stmt1->get_result();
while ($row1 = $result1->fetch_assoc();
    $one_id = $row['id'];
    $stmt2->execute();
    $result2 = $stmt2->get_result();
    $row2 = $result2->fetch_assoc();
    $stmt3->execute();
    $result3 = $stmt3->get_result();
    $row3 = $result3->fetch_assoc();
    echo $one[] = "<tr><td>".$row1["fromdbone"]."</td>";
    echo $two[] = "<td>".$row2["fromdbtwo"]."</td>";
    echo $three[] = "<td>".$row3["fromdbone_table2"]."</td></tr>";
}
$stmt1->close();
$stmt2->close();
$stmt3->close();

【讨论】:

  • 感谢您的回答,但由于我的可读性问题,我讨厌这样做,我怎样才能拥有多个语句,然后像上面的示例一样回显结果?谢谢:)
  • 好的,我已经添加了那个版本。
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多