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数据库?相关推荐

  1. 创建了联合索引还用在单个字段上创建索引吗_数据库 索引并不是万能的

    数据库 -- 索引并不是万能的 在这里插入图片描述 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行 ...

  2. mysql中如何将一个表中的部分记录合并,MySQL数据库将多条记录的单个字段合并成一条记录_MySQL...

    bitsCN.com MySQL数据库将多条记录的单个字段合并成一条记录 MySQL数据库将多条记录的单个字段合并成一条记录的操作是本文 我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧 ...

  3. 单个网页的搜索引擎优化(SEO)策略

    单个网页的搜索引擎优化(SEO)策略 搜索引擎(search engine)是指根据一定的策略.运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信 ...

  4. SEO单个网页的最优化操作

    核心提示:页面优化因此就是对网页元素的一系列出来,这些元素包括网页命名.网页标签.标题和网页内容,所以,我们就来讨论下这方面的内容. 单个网页的最优化是搜索引擎优化的细致工作,需要一页一页地认真展开, ...

  5. 利用img请求一个html页面,爬虫学习笔记——爬取单个网页里的所有图片(入门)...

    最近闲着,想学一下爬虫 (^-^)V --[手动比耶]先从简单的练习开始吧~ 爬取单个网页里的所有图片,这个没有什么难点,因为不需要翻页哈哈哈哈. 我很喜欢一些文章中的配图,比如这篇,里面就会有很多电 ...

  6. Python爬虫练习笔记——爬取单个网页里的所有图片(入门)

    最近闲着,想学一下爬虫 (^-^)V --[手动比耶] 先从简单的练习开始吧~ 爬取单个网页里的所有图片,这个没有什么难点,因为不需要翻页哈哈哈哈. 我很喜欢一些文章中的配图,比如这篇,里面就会有很多 ...

  7. 批量保存网页为单个网页文件

    有时候,总有会遇到一些奇怪的需求,各种搜索都找不到答案,本次记录批量保存网页到单个网页文件. 使用背景: 只想简单的解决问题,不涉及编程 网页带格式,将网页存为PDF格式会变 量太大,一个个的处理太累 ...

  8. 提示网站服务器403,如何解决电脑网页提示网站拒绝显示此网页和HTTP 403的问题...

    ‍ 最近有用户在电脑系统中使用浏览器打开网页的时候,显示网站拒绝显示此网页和HTTP 403错误,这样的错误通常发生在单个网站上,应该是系统调用错误的登录缓存信息引起的.那么如何解决电脑网页提示网站拒 ...

  9. r语言抓取网页数据_使用R进行网页抓取的简介

    r语言抓取网页数据 by Hiren Patel 希伦·帕特尔(Hiren Patel) 使用R进行网页抓取的简介 (An introduction to web scraping using R) ...

最新文章

  1. Android开发之SDK开发获取资源id报错的问题
  2. 一些机器学习数据集(Dataset)
  3. 如何处理Express异常?
  4. 社交柔道术 - 《影响力》读书笔记(一)
  5. 数据库sql 四种语言DDL DML DCL DQL 基本语法
  6. 晶振-电路中的心脏起搏器
  7. ha linux 设置虚拟ip_配置双机HA - Linux下环境安装配置Rose HA全攻略(图)_数据库技术_Linux公社-Linux系统门户网站...
  8. 基于单片机的水温液位监测系统设计(#0513)
  9. C# web 分页控件
  10. 人工智能期末考试复习(贲可荣 张彦铎)
  11. Sublime Text 3--->中文乱码的解决方法
  12. 计算机功能清单,如何使用印象笔记的清单功能?清单快速上手教程
  13. 抢滩抖音、B站,快手港股IPO进程加速
  14. codeblocks出现Encoding Changed The saved doucument contained characters which were illeal
  15. myeclipse 10.0下载及安装
  16. Simulink代码生成: Model Reference及其代码
  17. echart webstock vue实现实时心率图
  18. 打印机打印列队中打印状态为错误的解决方式之一
  19. pycaret的具体使用流程
  20. 2021京津冀交通协同发展大会盛大召开!

热门文章

  1. Docker最全教程——MongoDB容器化(十三)
  2. ASP.NET Core Web API + Ng6 实战视频 Day 2
  3. Git 操作笔记/pip换源
  4. java.lang包有哪些类_Java中Lang包的工具类有哪些
  5. 达摩院年终预测出炉:2022 十大科技趋势,AI for Science 高居榜首
  6. 【MATLAB统计分析与应用100例】案例018:matlab读取Excel数据,进行K均值聚类分析
  7. 【ArcGIS风暴】基于ArcGIS空间分析功能研究渭河流域镇驻地空间分布格局
  8. 【ArcGIS风暴】ArcGIS 10.2栅格计算器实用公式大全(经典珍藏版)
  9. ENVI IDL读写数据
  10. linux之类似Windows的资源管理器gnome-system-monitor(可用这个杀死进程)