php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?
php - 如何在單個(gè)網(wǎng)頁(yè)上連接多個(gè)MySQL數(shù)據(jù)庫(kù)?
我將信息分散在幾個(gè)數(shù)據(jù)庫(kù)中,并希望使用PHP將所有信息放到一個(gè)網(wǎng)頁(yè)上。 我想知道如何連接到單個(gè)PHP網(wǎng)頁(yè)上的多個(gè)數(shù)據(jù)庫(kù)。
我知道如何使用以下方法連接到單個(gè)數(shù)據(jù)庫(kù):
$dbh = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
但是,我可以使用多個(gè)“mysql_connect”命令來(lái)打開其他數(shù)據(jù)庫(kù),如果我連接了多個(gè)數(shù)據(jù)庫(kù),那么PHP如何知道我希望從中獲取信息的數(shù)據(jù)庫(kù)。
JoshFinnie asked 2019-04-09T05:23:13Z
11個(gè)解決方案
320 votes
您可以多次調(diào)用SELECT * FROM database2.tablename,但如果參數(shù)相同,則需要為'$new_link'(第四個(gè))參數(shù)傳遞true,否則將重用相同的連接。 例如:
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);
然后查詢數(shù)據(jù)庫(kù)1傳遞第一個(gè)鏈接標(biāo)識(shí)符:
mysql_query('select * from tablename', $dbh1);
對(duì)于數(shù)據(jù)庫(kù)2傳遞第二個(gè):
mysql_query('select * from tablename', $dbh2);
如果您沒(méi)有傳遞鏈接標(biāo)識(shí)符,則使用最后創(chuàng)建的連接(在本例中為SELECT * FROM database2.tablename表示的連接),例如:
mysql_query('select * from tablename');
其他選擇
如果MySQL用戶可以訪問(wèn)兩個(gè)數(shù)據(jù)庫(kù)并且它們位于同一主機(jī)上(即兩個(gè)數(shù)據(jù)庫(kù)都可以從同一個(gè)連接訪問(wèn)),您可以:
保持一個(gè)連接打開,并根據(jù)需要調(diào)用SELECT * FROM database2.tablename進(jìn)行交換。 我不確定這是一個(gè)干凈的解決方案,你最終可能會(huì)查詢錯(cuò)誤的數(shù)據(jù)庫(kù)。
在查詢中引用表時(shí)指定數(shù)據(jù)庫(kù)名稱(例如SELECT * FROM database2.tablename)。 實(shí)施這可能是一種痛苦。
另請(qǐng)閱讀troelskn的答案,因?yàn)槿绻軌蚴褂肞DO而不是舊的擴(kuò)展,這是一種更好的方法。
Tom Haigh answered 2019-04-09T05:24:17Z
92 votes
如果您使用PHP5(并且您應(yīng)該,因?yàn)镻HP4已被棄用),您應(yīng)該使用PDO,因?yàn)檫@正逐漸成為新標(biāo)準(zhǔn)。 PDO的一個(gè)(非常)重要的好處是它支持綁定參數(shù),這使得代碼更加安全。
您將通過(guò)PDO連接,如下所示:
try {
$db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
echo 'Connection failed: ' . $ex->getMessage();
}
(當(dāng)然替換上面的databasename,用戶名和密碼)
然后,您可以像這樣查詢數(shù)據(jù)庫(kù):
$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();
如果您需要一次打開多個(gè)連接,您只需創(chuàng)建多個(gè)PDO實(shí)例:
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
我讓我的生活變得簡(jiǎn)單:
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提供了一次連接多個(gè)數(shù)據(jù)庫(kù)的功能。
$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";
您可以從兩個(gè)數(shù)據(jù)庫(kù)中獲取上述查詢的數(shù)據(jù),如下所示
$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
除非您確實(shí)需要使用多個(gè)PDO對(duì)象實(shí)例,否則請(qǐng)考慮以下事項(xiàng):
$con = new PDO('mysql:host=localhost', $username, $password,
array(PDO::ATTR_PERSISTENT => true));
請(qǐng)注意構(gòu)造參數(shù)中缺少USE dbname。
當(dāng)您通過(guò)終端或其他工具連接到MySQL時(shí),不需要數(shù)據(jù)庫(kù)名稱。 您可以通過(guò)PDO::exec()方法使用USE dbname語(yǔ)句在數(shù)據(jù)庫(kù)之間切換。
$con->exec("USE someDatabase");
$con->exec("USE anotherDatabase");
當(dāng)然,您可能希望將其包裝在catch try語(yǔ)句中。
Michael Ratcliffe answered 2019-04-09T05:28:37Z
2 votes
您可以使用MySQLi語(yǔ)法,這樣可以更好地處理它。
定義數(shù)據(jù)庫(kù)連接,然后每當(dāng)要查詢其中一個(gè)數(shù)據(jù)庫(kù)時(shí),請(qǐng)指定正確的連接。
例如。:
$Db1 = new mysqli('$DB_HOST','USERNAME','PASSWORD'); // 1st database connection
$Db2 = new mysqli('$DB_HOST','USERNAME','PASSWORD'); // 2nd database connection
然后在同一頁(yè)面上查詢它們,使用類似于:
$query = $Db1->query("select * from tablename")
$query2 = $Db2->query("select * from tablename")
die("$Db1->error");
以這種方式更改為MySQLi將對(duì)您有所幫助。
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);
這是我使用的最明顯的解決方案,但請(qǐng)記住,如果數(shù)據(jù)庫(kù)的用戶名/密碼在同一主機(jī)中完全相同,則此解決方案將始終使用第一個(gè)連接。 因此,不要混淆在這種情況下這不起作用。 您需要做的是,為2個(gè)數(shù)據(jù)庫(kù)創(chuàng)建2個(gè)不同的用戶,它將起作用。
Lazy Fellow answered 2019-04-09T05:30:14Z
2 votes
您實(shí)際上并不需要select_db.您可以同時(shí)向兩個(gè)數(shù)據(jù)庫(kù)發(fā)送查詢。 首先,授予DB1以從GRANT select ON DB2.* TO DB1@localhost;選擇DB2。然后,FLUSH PRIVILEGES;。最后,您可以進(jìn)行“多數(shù)據(jù)庫(kù)查詢”,如SELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2等。(不要忘記您需要'root'訪問(wèn)權(quán)限才能使用grant 命令)
Nagibaba answered 2019-04-09T05:30:54Z
1 votes
如果你使用mysqli并有兩個(gè)db_connection文件。 喜歡第一個(gè)是
define('HOST','localhost');
define('USER','user');
define('PASS','passs');
define('**DB1**','database_name1');
$connMitra = new mysqli(HOST, USER, PASS, **DB1**);
第二個(gè)是
define('HOST','localhost');
define('USER','user');
define('PASS','passs');
define(**'DB2**','database_name1');
$connMitra = new mysqli(HOST, USER, PASS, **DB2**);
所以只需更改mysqli中的參數(shù)傳遞名稱,如DB1和DB2。? 如果你在mysqli中傳遞相同的參數(shù),假設(shè)兩個(gè)文件中的DB1,則第二個(gè)數(shù)據(jù)庫(kù)將不再連接。 所以請(qǐng)記住,在mysqli函數(shù)中使用兩個(gè)或多個(gè)連接傳遞不同的參數(shù)名稱時(shí)
lotus weaver answered 2019-04-09T05:31:41Z
-1 votes
我在laravel完成了這個(gè)
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
總結(jié)
以上是生活随笔為你收集整理的php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人类文明真的可以在地下存在吗?
- 下一篇: c mysql binlog_Mysql