我试图在一个代码中访问两个不同的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来更改我连接的数据库。第一个查询工作正常,但第二个查询不会对数据库产生任何影响。所以我想知道问题可能是什么。有任何想法吗?
答案 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');