繁体   English   中英

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

[英]How to connect to two different MySQL databases

我试图用一个代码访问两个不同的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更改了我连接的数据库。 第一个查询工作正常,但是,第二个查询对数据库没有任何影响。 所以我想知道问题可能出在哪里。 有任何想法吗?

如果两个数据库位于MySQL的同一实例/服务器上,则实际上可以更改数据库而无需使用mysqli_select_db()函数。

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

例如:

SELECT col1 FROM `your_db_name`.`your_table_name`

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

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

要么

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

$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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM