如何在单个网页上连接到多个MySQL数据库?

2022-08-30 06:30:52

我的信息分散在几个数据库中,并希望使用PHP将所有信息放在一个网页上。我想知道如何在单个PHP网页上连接到多个数据库。

我知道如何使用以下内容连接到单个数据库:

$dbh = mysql_connect($hostname, $username, $password) 
        or die("Unable to connect to MySQL");

但是,我是否可以只使用多个“mysql_connect”命令来打开其他数据库,如果我确实连接了多个数据库,PHP如何知道我想要从哪个数据库中提取信息。


答案 1

警告:函数从php 5.5开始被弃用,从php 7.0开始被删除(参见 http://php.net/manual/intro.mysql.php),使用函数或从@Troelsknmysql_xxmysqli_xx


您可以对 进行多次调用,但如果参数相同,则需要为''(第四个)参数传递 true,否则将重用相同的连接。例如:mysql_connect()$new_link

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

然后查询数据库1传递第一个链接标识符:

mysql_query('select * from tablename', $dbh1);

对于数据库 2,传递第二个:

mysql_query('select * from tablename', $dbh2);

如果不传递链接标识符,则使用创建的最后一个连接(在本例中为 ) 的连接,例如:$dbh2

mysql_query('select * from tablename');

其他选项

如果MySQL用户有权访问两个数据库,并且它们位于同一主机上(即两个DB都可以从同一连接访问),则可以:

  • 保持一个连接处于打开状态,并根据需要调用以在两者之间切换。我不确定这是一个干净的解决方案,你最终可能会查询错误的数据库。mysql_select_db()
  • 在查询中引用表时指定数据库名称(例如 )。实施起来可能很痛苦。SELECT * FROM database2.tablename

另外,请阅读troelskn的答案,因为如果您能够使用PDO而不是较旧的扩展,这是一种更好的方法。


答案 2

如果你使用PHP5(鉴于PHP4已被弃用,你应该使用PDO,因为这正在慢慢成为新的标准。PDO的一个(非常)重要的好处是它支持绑定参数,这使得代码更加安全。

您可以通过 PDO 进行连接,如下所示:

try {
  $db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

(当然替换上面的数据库名称,用户名和密码)

然后,您可以像这样查询数据库:

$result = $db->query("select * from tablename");
foreach ($result as $row) {
  echo $row['foo'] . "\n";
}

或者,如果您有变量:

$stmt = $db->prepare("select * from tablename where id = :id");
$stmt->execute(array(':id' => 42));
$row = $stmt->fetch();

如果需要一次打开多个连接,则只需创建多个 PDO 实例:

try {
  $db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password');
  $db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

推荐