我需要用php脚本编写两个mysql查询,在这两种情况下,我都希望从同一服务器上的两个不同数据库获取数据。但是这些数据库名称存储在两个不同的变量中。
$link1 = mysql_connect($hostname_database,$username_database,$password_database);
$database1 = "android1";
$database2= "android2";
$result1 = mysql_query("Select * from database1.tablename");
$result2 = mysql_query("Select * from database2.tablename");
正确的方法是什么?
最佳答案
这是连接两个数据库的方式。您需要将true作为第二个连接中的第四个参数发送,否则将使用第一个连接。
$db1 = mysql_connect($hostname, $username, $password);
$db2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $db1);
mysql_select_db('database2', $db2);
然后要查询第一个数据库:
mysql_query('select * from tablename', $db1);
查询第二个数据库:
mysql_query('select * from tablename', $db2);
编辑1:我用了一个SO的答案,但似乎找不到那个答案。
编辑2:找到它:How do you connect to multiple MySQL databases on a single webpage?
编辑3:首选方式:
如果您使用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();
}