连接到多个数据库

时间:2011-07-01 14:21:40

标签: php mysql sphinx

我正在使用sphinx进行网站搜索,它运行良好,但现在我正在尝试连接到具有相同结构的2个mysql数据库,而db2是db1的延续,因此所有信息都应该流畅。我可以通过在代码中切换db名称来轻松获得结果,但是如何同时选择两者?

这是一些使用

的代码
$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");

如果我将单个mysql数据库输入$CONF['mysql_database'] = "db1";,此代码可以正常工作,但我需要从db1db2中选择。有谁知道我怎么能做到这一点?此外,我没有发布查询,因为我认为它不是非常有用它只是一个简单的选择查询,我相信你明白了。

1 个答案:

答案 0 :(得分:2)

如果数据库托管在同一台服务器上,您可以在调用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()进行2次单独调用。在这种情况下,请确保将可选的$link参数传递给所有 mysql_函数,因为默认行为是简单地使用最新的连接,这可能会导致各种虫子由于每个数据库都有一个单独的连接,因此您将无法运行访问这两个数据库的单个查询。