首页  >  文章  >  数据库  >  如何在 PHP 中对同一主机上的多个数据库执行跨数据库查询?

如何在 PHP 中对同一主机上的多个数据库执行跨数据库查询?

Susan Sarandon
Susan Sarandon原创
2024-11-10 20:28:03541浏览

How can I perform cross database queries in PHP with multiple databases on the same host?

PHP 中的跨数据库查询

在上一篇文章中,我们探讨了 MySQL 中跨数据库查询的构建。虽然这种方法在 MySQL 中有效,但在 PHP 中直接应用却具有挑战性。具体来说,在尝试访问多个数据库时,在 PHP 中使用 mysql_select_db 会带来限制。

选项和限制

在 PHP 中使用 mysql_select_db 时可用的两个主要选项分别是:

  1. 限制访问单个数据库,防止跨数据库查询。
  2. 省略 mysql_select_db,这需要为每个查询指定数据库。

这些选项都不符合执行跨数据库查询而无需对现有代码进行费力更改的目标。

解决方案:同一主机配置

要解决此问题,您的数据库必须驻留在同一主机上。这允许您手动指定外部数据库,同时保持与首选默认数据库的连接。

$db = mysql_connect($host, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

替代解决方案:单独的主机

如果您的数据库驻留在不同的主机上,直接连接是不可能的。在这种情况下,您可以对特定主机执行单独的查询:

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);
$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);

以上是如何在 PHP 中对同一主机上的多个数据库执行跨数据库查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn