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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis主从持久化测试

1:redis主从环境,均未开启持久化;当主实例宕机,从实例上的数据不受影响;当主恢复后,主实例上的数据将会继续同步到从实例,即原来的值将变为空值;[rootserver11 ~]# /usr/local/redis2/bin/redis…

人生苦短,我用Python!

在大数据时代,信息更新非常快速,计算机语言也犹如雨后春笋般被我们所熟知。C语言、C、Java等可谓是各领风骚、独占鳌头,而Python则是一门近几年崛起很快也很火的编程语言。虽说编程语言难分好坏,各有千秋。但Python到底有什么魔力…

【OpenCV学习】OpenMP并行化实例

作者&#xff1a;gnuhpc 出处&#xff1a;http://www.cnblogs.com/gnuhpc/ #include "cv.h" #include "highgui.h" #include <stdio.h> #include <stdlib.h> #include <omp.h>void EdgeOpenMP(IplImage *src,IplImage *dst,int thresh) …

一探即将到来的 C# 10

前言本来因为懒不想写这篇文章&#xff0c;但是不少人表示有兴趣&#xff0c;于是最后决定还是写一下。.NET 6 最近几个预览版一直都在开发体验&#xff08;如 hot reload、linker 等&#xff09;、平台支持&#xff08;如 Android、iOS 等&#xff09;、工具链&#xff08;如 …

预售┃没有标题,配得上这款“俄罗斯方块”

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

c mysql binlog_Mysql Binlog

一&#xff0e;Mysql Binlog格式介绍Mysql binlog日志有三种格式&#xff0c;分别为Statement,MiXED,以及ROW&#xff01;1.Statement&#xff1a;每一条会修改数据的sql都会记录在binlog中。优点&#xff1a;不需要记录每一行的变化&#xff0c;减少了binlog日志量&#xff0c…

读Getting Started With Windows PowerShell笔记

使用中Powershell的操作跟Linux中的终端操作很多地方是一致的&#xff0c;当然&#xff0c;还是有着Windows自己的特色&#xff0c;比如&#xff0c;不分大小写。之前命令行中的命令大部分在这里也可以用&#xff0c;而且用法一样。选中后点右键&#xff0c;即复制到剪切板。不…

NET问答: String 和 string 到底有什么区别?

咨询区 Peter O.&#xff1a;开门见山&#xff0c;参考如下例子&#xff1a;string s "Hello world!"; String s "Hello world!";请问这两者有什么区别&#xff0c;在实际使用上要注意一些什么&#xff1f;回答区 Derek Park&#xff1a;string 是 C# 中…

mysql 5.7.6 5.7.19_MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)

本文主要向大家介绍MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)了 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。1、从官网下载64位zip文件。2、把zip解压到一个位置&#xff0c;此位置为安装为安装位置3、如果有以前的mysql 如…

LVS负载均衡-NET、DR模式配置

模型一&#xff1a;NAT模型的配置 实验环境&#xff1a; 采用VMware虚拟机&#xff0c;版本6.0.5 操作系统&#xff1a;Red Hat Enterprise Linux 5 (2.6.18) 虚拟机1&#xff1a;充当Director&#xff1a;网卡1(桥接):192.168.0.33&#xff08;对外&#xff09;&#xff0c;网…

编程语言的“别样”编年史

全世界只有3.14 % 的人关注了数据与算法之美代码是一门语言&#xff0c;这门语言搭建了人与计算机沟通的桥梁。通过编写代码&#xff0c;人类可以“命令”计算机开发网页、开发软件、搭建游戏... ... 这门语言并不是上帝的发明&#xff0c;它是前辈们发挥聪明才智创造出来的&am…

mysql目录树_无限级目录树+记忆节点状态(PHP+mysql)

借鉴 网友 iuhxq 的设计制作而成的目录树&#xff0c;在此感谢 iuhxq 的代码对我大帮助。特点&#xff1a;1、无限级节点。2、直接产生html代码&#xff0c;容易修改。3、目录清楚&#xff0c;类似于资源管理器&#xff0c;(csdn论坛的&#xff0c;层数多了就不容易分清楚层次了…

NET问答: 如何使用 C# 比较两个 byte[] 的相等性 ?

咨询区 Hafthor&#xff1a;我现在业务中遇到了一个场景&#xff1a;如何简洁高效的判断两个 byte[] 的相等性&#xff1f;我现在是这么实现的&#xff0c;有一点繁琐&#xff1a;static bool ByteArrayCompare(byte[] a1, byte[] a2) {if (a1.Length ! a2.Length)return false…

也可以改为while(input[0])或while(cininput[0])

2019独角兽企业重金招聘Python工程师标准>>> <<c primer plus>> // static.cpp -- using a static local variable #include <iostream> // constants const int ArSize 10; // function prototype void strcount(const char * str); int main()…

.NET Core HttpClient请求异常分析

【导读】最近项目上每天间断性捕获到HttpClient请求异常&#xff0c;感觉有点奇怪&#xff0c;于是乎观察了两三天&#xff0c;通过日志以及对接方沟通确认等等&#xff0c;查看对应版本源码&#xff0c;尝试添加部分配置发布后&#xff0c;观察十几小时暂无异常情况出现&#…

python 小甲鱼 代码_Python小代码

先自我介绍一下&#xff0c;本人是正在自学Python的小白&#xff0c;没事分享一下自己写的小代码&#xff0c;欢迎在评论区补充。游戏管理系统&#xff1a;代码如下&#xff1a;def healthe(m):if m"Y"or y:print("欢迎&#xff0c;请进入游戏&#xff01;"…

原来这些行业的“潜规则”是这样的...

全世界只有3.14 % 的人关注了数据与算法之美在日常生活中&#xff0c;我们往往受限于专业和工作&#xff0c;对自己所处行业之外的事物了解不多。今天&#xff0c;数据汪带大家扒一扒各个行业中不为人知的“潜规则”&#xff0c;看看你们知道几个&#xff1f;看完上面20个“潜规…

“工业互联网平台“将成为工业制造企业的标配

目 录1. 概述2. 背景3. 评述1. 概述“‘工业互联网平台’将成为工业制造企业的标配”的命题既是基于工业生产企业现实情况的判断&#xff0c;又是对工业企业未来发展的需求判断。前途是光明的&#xff0c;但是道路是曲折的。前途的光明是基于工业企业现实…

5.[BX]和Loop指令

1.Debug和MASN中读取内存单元的区别&#xff1a;Debug中:mov ax,0ffffhmov ds,axmov al,[1]MASN中:mov ax,0ffffhmov ds,axmov bx,1mov al,[bx]或者mov ax,0ffffhmov ds,axmov al,ds:[1]2.Loop指令assume cs:codecode sementmov ax,2mov cx,3s: add ax,axloop scode ednsend 其…

linux mysql安装教程 方大帝_discuz论坛出现Can not connect to MySQL server错误的解决方法...

网站出现了问题&#xff0c;大家一定很着急吧&#xff0c;特别是做网站的&#xff0c;这几天有一台MySQL数据库服务器频繁出现掉线&#xff0c;经排查&#xff0c;并没有哪个网站受攻击&#xff0c;网上搜索了一下&#xff0c;很多人都碰到这问题&#xff0c;全是Windows系统上…