我正在使用 sphinx 进行站点搜索,效果很好,但现在我正在尝试连接到 2 个具有完全相同结构的 mysql 数据库,而 db2 是 db1 的延续,因此所有信息都应该顺利流动。我可以通过在代码中切换数据库名称轻松获得结果,但如何同时选择两者?
这是我正在使用的一些代码
$CONF['sphinx_host'] = 'localhost';
$CONF['sphinx_port'] = 9312;
$CONF['mysql_host'] = "localhost";
$CONF['mysql_username'] = "user";
$CONF['mysql_password'] = "password";
$CONF['mysql_database'] = "db1";
$CONF['sphinx_index'] = "index index2";
$db = mysql_connect($CONF['mysql_host'],$CONF['mysql_username'],$CONF['mysql_password']) or die("ERROR: unable to connect to database");
mysql_select_db($CONF['mysql_database'], $db) or die("ERROR: unable to select database");
$sql = str_replace('$ids',implode(',',$ids),$CONF['mysql_query']);
$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later");
如果我在 $CONF['mysql_database'] = "db1";
中输入单个 mysql 数据库,此代码工作正常,但我需要从 db1
和 db2
。有谁知道我怎么能做到这一点?我也没有发布查询,因为我认为它不是很有用,它只是一个简单的选择查询,我相信你明白了。
最佳答案
如果数据库托管在同一台服务器上,您可以简单地在调用 mysql_select_db()
时任意选择一个,然后使用 databasename 限定 SQL 查询中的所有表名。
前缀。您甚至可以在单个查询中混合和匹配来自两个数据库的表。例如。
select h.lastname, h.firstname, p.petname
from db1.humans as h
left outer join db2.pets as p on p.human_id = h.id;
如果您不需要编写涉及两个数据库的查询,您可以在每次需要切换数据库时再次调用 mysql_select_db()
。
如果数据库托管在不同的服务器上,您将需要两次单独调用 mysql_connect()
。在这种情况下,确保将可选的 $link
参数传递给 all mysql_
函数,因为默认行为是简单地使用最近的连接,这可能会导致各种错误。由于每个数据库都有一个单独的连接,您将无法运行访问两个数据库的单独查询。
关于php - 连接到多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549219/