【问题标题】:Connect to two different databases in PHP?在 PHP 中连接到两个不同的数据库?
【发布时间】:2012-05-04 18:53:52
【问题描述】:

我正在考虑用 php 连接到我的项目中的 2 个数据库。

一个是我们票务系统中使用 MS ACESS 的现有数据库,另一个是我现在使用的 MYSQL。

MS 访问的用途只是从中检索数据,而 MYSQL 将用于检索和存储数据。

是否可以同时连接到两个数据库?

【问题讨论】:

  • 为什么不呢?您可以连接到所需的任意数量的数据库。
  • 所以在使用的主机和服务器上都不会出现问题??
  • @Bert:这在技术上是完全可行的(PHP 对如此低级别的数据库连接数没有内置限制),而 PDO 可以帮助您轻松做到这一点。

标签: php mysql ms-access odbc


【解决方案1】:

简短回答:

长答案:
您应该确保您的代码始终使用连接标识符以避免混淆并具有干净、可读的代码。 (特别是当您使用 ODBC 或 PDO 等抽象层连接到两个数据库时)

请查看PHP Manual on PDO and connection management

例子:

$link_mysql = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$link_msaccess = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\test.mdb");

// query MySQL DB
foreach($link_mysql->query('SELECT * FROM test') as $row) {
    print_r($row);
}

// query MS Access DB
foreach($link_msaccess->query('SELECT * FROM omg_its_access') as $row) {
    print_r($row);
}

没有 PDO 的示例:

$link_mysql = mysql_connect("localhost", $user, $pass);
mysql_select_db("test", $link_mysql);

$link_msaccess = odbc_connect("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\test.mdb");

// you may omit the link identifier for MySQL, but i suggest to use it explicitly 
$res1 = mysql_query('SELECT * FROM test', $link_mysql);
while ($row = mysql_fetch_row($res1)) {
    print_r($row);
}
// for ODBC the link identifier is mandatory
$res2 = odbc_exec($link_msaccess, 'SELECT * FROM omg_its_access');
while ($row = odbc_fetch_row($res2)) {
    print_r($row);
}

正如您在上面看到的,两个数据库驱动程序的代码在语法上有所不同——这就是我建议使用 PDO 的原因。

PDO 将避免很多麻烦,并且如果您决定稍后再切换到另一个数据库驱动程序,它会使切换到另一个数据库驱动程序变得更加容易。它抽象了所有数据库驱动程序,并为您提供了一个简单的接口,可以用相同的语法处理它们。

【讨论】:

    【解决方案2】:

    例如,如果您使用的是PDO,那是可能的。只需为每个连接创建一个 pdo 对象 - 只需使用 mysql-driver for mysqlodbc-connection for access

    【讨论】:

    • 我没有使用 PDO,但我会试一试。
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2015-11-12
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多