来自PHP中3个不同数据库的mysql_fetch_array

时间:2016-07-26 11:55:34

标签: php mysql

我正在尝试创建一个从不同数据库显示数据的网站。 我制作了3个简单的数据库(Application(app_id,app_name),Manager(manager_id,manager_name),Website(website_id,website_name))

以下是我用来连接数据库的代码:

$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("Application", $con);

$result1 = mysql_query("SELECT a.app_id, a.app_name FROM Application a");


//connection with other db
$con2 = mysql_connect("localhost","root","");
if (!$con2)
  {
die('Could not connect: ' . mysql_error());
  }

mysql_select_db("Manager", $con2);

$result2 = mysql_query("SELECT b.manager_id, b.manager_name FROM Manager b");

//connection with other db
$con3 = mysql_connect("localhost","root","");
if (!$con3)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("Website", $con3);

$result3 = mysql_query("SELECT c.website_id, c.website_name FROM Website c");

然后我在表格中回应:

echo "<table border='1'>
<tr>
<th>ID</th>
<th>Application</th>
<th>Manager</th>
<th>Website</th>
</tr>";

while(($row = mysql_fetch_array($result1)) && ($row2 = mysql_fetch_array($result2)) && ($row3 = mysql_fetch_array($result3)))

  {
  echo "<tr>";
  echo "<td>" . $row['app_id'] . "</td>";
  echo "<td>" . $row['app_name'] . "</td>";
  echo "<td>" . $row['manager_name'] . "</td>";
  echo "<td>" . $row2['website_name'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
mysql_close($con2);

这是在表格中显示数据,但没有关系,所以我创建了这个:

$resultcombo = mysql_query("SELECT a.app_id, a.app_name, b.manager_name, c.website_name FROM Application.Application a JOIN Manager.Manager b on a.app_id = b.manager_id JOIN Website.Website c ON a.app_id = c.website_id ");

以上查询在phpmyadmin中工作,它显示彼此链接的正确信息(ID 1 =应用程序x,管理器x,网站x)

但是如何连接3个不同的数据库(将来可能更多)以填充表格,并使用链接到管理员和网站的正确应用程序?

我感觉我所做的3个连接都没用,因为表格填写不正确。也许我必须将1个mysql_connect连接到3个不同的数据库。

请注意:我使用3x localhost进行测试,但将来我想使用不同网址的数据库!

1 个答案:

答案 0 :(得分:3)

尊敬的是,您对数据库表之间的区别感到困惑。您说这个查询有效。

SELECT a.app_id, a.app_name, 
       b.manager_name, c.website_name
  FROM Application a
  JOIN Manager b on a.app_id = b.manager_id
  JOIN Website c ON a.app_id = c.website_id

这清楚地表明您只有一个数据库,其中包含三个。表格为ApplicationManagerWebsite

在提问者澄清问题之后

编辑

这里有两种可能的情况。

  1. 您有多个数据库驻留在同一个MySQL服务器中。
  2. 您有多个数据库驻留在不同的MySQL服务器中。
  3. 在第一种情况下,您的问题似乎可能只有一个用户名/密码组合可以访问所有三个数据库。所以,只需使用一个连接,并使用这样的查询。

    SELECT a.app_id, a.app_name, 
           b.manager_name, c.website_name
      FROM Application.Application a
      JOIN Manager.Manager b on a.app_id = b.manager_id
      JOIN Manager.Website c ON a.app_id = c.website_id
    

    您已经知道,如果表名在查询中,如果它们位于同一服务器上并且您的连接用户名可以访问所有,则可以使用数据库名称限定表名。所以,编程好像你的表位于同一地点。

    如果您的数据库可能位于不同的MySQL服务器上,那么您自己就会购买一个巨型毛球。 (这是一个技术术语。)你可以......

    1. 为每个MySQL服务器使用不同的连接,将每个表中的数据分别读入您的php程序,并使用各种php列表处理算法加入它,或者......
    2. 为自己建立一堆可以互相访问的federated MySQL servers&#39;数据。
    3. 但是你应该避免以这种方式设计你的系统,除非你绝对必须这样做。

      为什么你必须这样做?

      • 也许这些表格太大而无法放入单个服务器中。这似乎不太可能。对于一台服务器,它们必须至少有10 ^ 10行。在这种情况下,您可能已经拥有数据库管理员。寻求帮助。
      • 也许您不拥有这些数据,您必须实时报告,不得有任何延迟,允许您先将其上传到您的MySQL服务器。

      如果您使用多服务器设计进行关键任务生产工作,那么您将在系统的整个生产生命周期中承受巨大的麻烦。您可能希望聘请数据库管理员来处理其中一些令人头疼的问题。认真。避免这种情况。