如何连接到两个不同的MySQL数据库

时间:2015-11-13 17:03:59

标签: php mysql mysqli

我试图在一个代码中访问两个不同的MySQL数据库。

$user = 'root';
$password = 'root';
$db = 'tag';
$host = 'localhost';
$port = 8889;

$link = mysqli_init();
$success = mysqli_real_connect(
   $link, 
   $host, 
   $user, 
   $password, 
   $db,
   $port
);

$query = mysqli_query($link,"INSERT INTO lists (name)
    VALUES('$_POST[newtag]')");


mysqli_select_db("following/tagged" , $link);

$sql = mysqli_query($link,"INSERT INTO list_of_links_tagged (tag_id)
    VALUES('3')");

如您所见,我使用mysql_select_db来更改我连接的数据库。第一个查询工作正常,但第二个查询不会对数据库产生任何影响。所以我想知道问题可能是什么。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果两个数据库位于MySQL的同一实例/服务器上,您实际上可以在不使用mysqli_select_db()函数的情况下更改数据库。

只需在表名前加上数据库名称。

例如:

SELECT col1 FROM `your_db_name`.`your_table_name`

如果需要,您甚至可以跨数据库将两个表连接在一起,只要为每个表指定数据库名称即可。

答案 1 :(得分:-1)

如果您使用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();
}

OR

您可以对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');