从多个数据库执行多个语句

时间:2017-12-30 00:25:50

标签: php mysql mysqli prepared-statement

数据库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表格中?

谢谢,我一直试图解决这个问题几个小时,所以我希望你能帮忙!

1 个答案:

答案 0 :(得分:0)

由于这两个数据库位于同一服务器(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();