如何在PHP中构建跨数据库查询?
P粉197639753
P粉197639753 2023-10-22 11:40:00
[PHP讨论组]

在我们的上一集(如何在 MySQL 中构建跨数据库查询)中,我学习了如何在 MySQL 中构建跨数据库查询。这很有效,但是当我们的英雄尝试在 PHP 中使用这些新发现的知识时,他发现他最好的朋友失败了。

我查看了 PHP 的 mysql_select_db 。这似乎意味着,如果我想将 MySQL 与 PHP 一起使用,我有几个选择:

  1. 使用 mysql_select_db 但每次只能使用一个数据库。这是我们当前的设置,将数据库作为命名空间标识符似乎不起作用(它在 MySQL shell 中工作正常,所以我知道这不是我们的 MySQL 服务器设置的问题)。

  2. 不要使用 mysql_select_db。从我看到的一些示例来看,这似乎意味着我必须为我所做的每个查询指定数据库。这是有道理的,因为我没有使用 mysql_select_db 来告诉 PHP 我想要访问哪个数据库。这也让人难过,因为我不想遍历所有代码并在每个查询前添加数据库名称。

还有比这更好的吗?有没有办法让我在 PHP 中进行跨数据库 MySQL 查询,而不必像 (2) 这样疯狂的事情?

澄清:所提出的答案实际上都没有让我进行跨数据库查询。相反,它们允许我分别访问两个不同的数据库。我想要一个解决方案,允许我执行类似 SELECTforeign_db.login.username,firstname,lastname fromforeign_db.login,user where... 的操作,而不仅仅是对不同的数据库进行不同的查询。就其价值而言,(2) 对我来说不起作用。

P粉197639753
P粉197639753

全部回复(1)
P粉481366803

您将需要数据库在同一主机上运行。

如果是这样,您应该能够在您最喜欢的/默认数据库上使用 mysql_select_db 并手动指定外部数据库。

$db = mysql_connect($hots, $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
");

如果您的数据库运行在不同的主机上,您将无法直接加入。但随后您可以进行 2 个查询。

$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培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号