Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多个数据库执行多个语句_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

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

Php 从多个数据库执行多个语句,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,DB 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 experie

DB 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!");
    }
    ?>

DB 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();
?>

我的尝试代码:

<?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表中


谢谢,几个小时来我一直在想这个问题,希望你能帮我

由于这两个数据库位于同一台服务器(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();
$stmt=$db\u one->prepare(“从其中选择*作为o
将一个表2连接为o.id上的o2=o.id上的o2
在o.id=t.1_-id“)上连接2.2作为t;
$stmt->execute();
$result=$stmt->get_result();
而($row=$result->fetch_assoc()){
echo$one[]=“”.$row[“fromdbone”]”;
echo$two[]=“”.$row[“fromdb2”]”;
echo$three[]=“”.$row[“fromdbone_table2”]”;
}
}
$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();
$stmt1=$db_one->prepare(“从`one`中选择*”;
$stmt2=$db_one->prepare(“从`one_table2`中选择*其中one_id=?”;
$stmt3=$db_two->prepare(“从'two'中选择*,其中一个id=?”;
$stmt2->bind_参数(“i”,一个id);
$stmt3->bind_参数(“i”,$one_id);
$stmt1->execute();
$result1=$stmt1->get_result();
而($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[]=“”.$row1[“fromdbone”]”;
echo$two[]=“”.$row2[“fromdb2”]”;
echo$three[]=”.$row3[“来自Dbone_table2”]。”;
}
$stmt1->close();
$stmt2->close();
$stmt3->close();

什么是
$db\u bans
?脚本设置
$db\u one
$db\u two
。您需要将每个准备好的语句分配给不同的变量。否则,您只执行最后一个查询。但您可能应该在单个查询中加入表。很难说您想做什么。@Barmar我现在编辑了它ry,我从我已经在工作的系统中获取了这段代码,并对其进行了更改,使其成为一个示例。您不需要为每个数据库使用不同的连接。您可以通过使用前缀来访问不同数据库中的表:
SELECT*from two。two
感谢您的回答,但我讨厌这样做,因为我的可读性问题,我怎么能拥有multiple然后重复上面例子中的结果?谢谢:)好的,我已经添加了这个版本。