php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?
php - 如何在單個網頁上連接多個MySQL數據庫?
我將信息分散在幾個數據庫中,并希望使用PHP將所有信息放到一個網頁上。 我想知道如何連接到單個PHP網頁上的多個數據庫。
我知道如何使用以下方法連接到單個數據庫:
$dbh = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
但是,我可以使用多個“mysql_connect”命令來打開其他數據庫,如果我連接了多個數據庫,那么PHP如何知道我希望從中獲取信息的數據庫。
JoshFinnie asked 2019-04-09T05:23:13Z
11個解決方案
320 votes
您可以多次調用SELECT * FROM database2.tablename,但如果參數相同,則需要為'$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);
如果您沒有傳遞鏈接標識符,則使用最后創建的連接(在本例中為SELECT * FROM database2.tablename表示的連接),例如:
mysql_query('select * from tablename');
其他選擇
如果MySQL用戶可以訪問兩個數據庫并且它們位于同一主機上(即兩個數據庫都可以從同一個連接訪問),您可以:
保持一個連接打開,并根據需要調用SELECT * FROM database2.tablename進行交換。 我不確定這是一個干凈的解決方案,你最終可能會查詢錯誤的數據庫。
在查詢中引用表時指定數據庫名稱(例如SELECT * FROM database2.tablename)。 實施這可能是一種痛苦。
另請閱讀troelskn的答案,因為如果您能夠使用PDO而不是舊的擴展,這是一種更好的方法。
Tom Haigh answered 2019-04-09T05:24:17Z
92 votes
如果您使用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();
}
(當然替換上面的databasename,用戶名和密碼)
然后,您可以像這樣查詢數據庫:
$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();
}
troelskn answered 2019-04-09T05:25:45Z
8 votes
我讓我的生活變得簡單:
CREATE VIEW another_table AS SELECT * FROM another_database.another_table;
希望它有用...歡呼......
Ihsan Kusasi answered 2019-04-09T05:26:25Z
6 votes
而不是mysql_connect使用mysqli_connect。
mysqli提供了一次連接多個數據庫的功能。
$Db1 = new mysqli($hostname,$username,$password,$db_name1);
// this is connection 1 for DB 1
$Db2 = new mysqli($hostname,$username,$password,$db_name2);
// this is connection 2 for DB 2
kaushik answered 2019-04-09T05:27:01Z
4 votes
試試以下代碼:
$conn = mysql_connect("hostname","username","password");
mysql_select_db("db1",$conn);
mysql_select_db("db2",$conn);
$query1 = "SELECT * FROM db1.table";
$query2 = "SELECT * FROM db2.table";
您可以從兩個數據庫中獲取上述查詢的數據,如下所示
$rs = mysql_query($query1);
while($row = mysql_fetch_assoc($rs)) {
$data1[] = $row;
}
$rs = mysql_query($query2);
while($row = mysql_fetch_assoc($rs)) {
$data2[] = $row;
}
print_r($data1);
print_r($data2);
Paks answered 2019-04-09T05:27:34Z
3 votes
除非您確實需要使用多個PDO對象實例,否則請考慮以下事項:
$con = new PDO('mysql:host=localhost', $username, $password,
array(PDO::ATTR_PERSISTENT => true));
請注意構造參數中缺少USE dbname。
當您通過終端或其他工具連接到MySQL時,不需要數據庫名稱。 您可以通過PDO::exec()方法使用USE dbname語句在數據庫之間切換。
$con->exec("USE someDatabase");
$con->exec("USE anotherDatabase");
當然,您可能希望將其包裝在catch try語句中。
Michael Ratcliffe answered 2019-04-09T05:28:37Z
2 votes
您可以使用MySQLi語法,這樣可以更好地處理它。
定義數據庫連接,然后每當要查詢其中一個數據庫時,請指定正確的連接。
例如。:
$Db1 = new mysqli('$DB_HOST','USERNAME','PASSWORD'); // 1st database connection
$Db2 = new mysqli('$DB_HOST','USERNAME','PASSWORD'); // 2nd database connection
然后在同一頁面上查詢它們,使用類似于:
$query = $Db1->query("select * from tablename")
$query2 = $Db2->query("select * from tablename")
die("$Db1->error");
以這種方式更改為MySQLi將對您有所幫助。
user3857891 answered 2019-04-09T05:29:44Z
2 votes
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2',$dbh2);
mysql_query('select * from tablename', $dbh1);
mysql_query('select * from tablename', $dbh2);
這是我使用的最明顯的解決方案,但請記住,如果數據庫的用戶名/密碼在同一主機中完全相同,則此解決方案將始終使用第一個連接。 因此,不要混淆在這種情況下這不起作用。 您需要做的是,為2個數據庫創建2個不同的用戶,它將起作用。
Lazy Fellow answered 2019-04-09T05:30:14Z
2 votes
您實際上并不需要select_db.您可以同時向兩個數據庫發送查詢。 首先,授予DB1以從GRANT select ON DB2.* TO DB1@localhost;選擇DB2。然后,FLUSH PRIVILEGES;。最后,您可以進行“多數據庫查詢”,如SELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2等。(不要忘記您需要'root'訪問權限才能使用grant 命令)
Nagibaba answered 2019-04-09T05:30:54Z
1 votes
如果你使用mysqli并有兩個db_connection文件。 喜歡第一個是
define('HOST','localhost');
define('USER','user');
define('PASS','passs');
define('**DB1**','database_name1');
$connMitra = new mysqli(HOST, USER, PASS, **DB1**);
第二個是
define('HOST','localhost');
define('USER','user');
define('PASS','passs');
define(**'DB2**','database_name1');
$connMitra = new mysqli(HOST, USER, PASS, **DB2**);
所以只需更改mysqli中的參數傳遞名稱,如DB1和DB2。? 如果你在mysqli中傳遞相同的參數,假設兩個文件中的DB1,則第二個數據庫將不再連接。 所以請記住,在mysqli函數中使用兩個或多個連接傳遞不同的參數名稱時
lotus weaver answered 2019-04-09T05:31:41Z
-1 votes
我在laravel完成了這個
ini_set('max_execution_time', 3600);
$old_users = DB::connection('mysql2')->table('user_master')->get();
foreach ($old_users as $old_user) {
if ($old_user->usr_phone != "0") {
$password = base64_decode($old_user->usr_pwd);
$password = Hash::make($password);
if ($old_user->device_type == "1") {
$device_type = "ios";
} else if ($old_user->device_type == "2") {
$device_type = "android";
} else {
$device_type = "web";
}
$user = new User;
$user->name = $old_user->usr_name;
$user->email = $old_user->usr_email;
$user->points_exp_date = "2018-08-02"; try {
$user->save();
} catch (\Exception $e) {
echo ("");
}
Log::info('user saved');
}
}
這是我的示例代碼
Balaji Rajendran answered 2019-04-09T05:32:33Z
總結
以上是生活随笔為你收集整理的php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人类文明真的可以在地下存在吗?
- 下一篇: c mysql binlog_Mysql