在我们的上一集(如何在 MySQL 中构建跨数据库查询)中,我学习了如何在 MySQL 中构建跨数据库查询。这很有效,但是当我们的英雄尝试在 PHP 中使用这些新发现的知识时,他发现他最好的朋友失败了。
我查看了 PHP 的 mysql_select_db 。这似乎意味着,如果我想将 MySQL 与 PHP 一起使用,我有几个选择:
使用 mysql_select_db 但每次只能使用一个数据库。这是我们当前的设置,将数据库作为命名空间标识符似乎不起作用(它在 MySQL shell 中工作正常,所以我知道这不是我们的 MySQL 服务器设置的问题)。
不要使用 mysql_select_db。从我看到的一些示例来看,这似乎意味着我必须为我所做的每个查询指定数据库。这是有道理的,因为我没有使用 mysql_select_db 来告诉 PHP 我想要访问哪个数据库。这也让人难过,因为我不想遍历所有代码并在每个查询前添加数据库名称。
还有比这更好的吗?有没有办法让我在 PHP 中进行跨数据库 MySQL 查询,而不必像 (2) 这样疯狂的事情?
澄清:所提出的答案实际上都没有让我进行跨数据库查询。相反,它们允许我分别访问两个不同的数据库。我想要一个解决方案,允许我执行类似 SELECTforeign_db.login.username,firstname,lastname fromforeign_db.login,user where... 的操作,而不仅仅是对不同的数据库进行不同的查询。就其价值而言,(2) 对我来说不起作用。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您将需要数据库在同一主机上运行。
如果是这样,您应该能够在您最喜欢的/默认数据库上使用 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);