[英]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.