我可以在php的一个应用程序中使用多个数据库吗?

时间:2014-04-17 06:43:10

标签: php mysql

我正在开发简单的应用程序,即与数据库操作相关的应用程序。

  • 我的疑问是如何同时连接多个数据库。

  • php如何知道数据将存储哪些数据库。

  • 如果用户输入将输入的数据库,包括数据库或一个数据库。

请回答我的问题。我为这个问题苦苦挣扎。

7 个答案:

答案 0 :(得分:2)

是的,你可以..使用两个连接字符串 ..

$mysqli1 = new mysqli('HOST1', 'USER1', 'PASSWORD1', 'DB_NAME1');


$mysqli2 = new mysqli('HOST2', 'USER2', 'PASSWORD2', 'DB_NAME2');

您的查询应该像

$result1 = $mysqli1->query('query ......');

$result2 = $mysqli2->query('query ......');

答案 1 :(得分:2)

如果您使用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();
}

(当然替换上面的数据库名,用户名和密码)

然后您可以像这样查询数据库:

$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();
}

答案 2 :(得分:1)

当然,如果您愿意,可以在下面给出示例添加更多连接:

Class database
{

 private oracleDatabase;
 private mysqlDatabase;

 public function connOracle() {
    $db = "";
    $user = "";
    $password = "";

    try {
        $this->oracleDatabase = new PDO("oci:dbname=".$db,$user,$password);
    } catch(PDOException $e){
        echo "Can't connect to database (Oracle). ". $e->getMessage();
    }
 }

 public function connMysql() {
    $db = "";
    $user = "";
    $password = "";

    try {
        $this->mysqlDatabase = new PDO("mysql:dbname=".$db,$user,$password);
    } catch(PDOException $e){
        echo "Can't connect to database (Mysql). ". $e->getMessage();
    }
 }

}

答案 3 :(得分:1)

如果您在同一台服务器上同时使用两个数据库,请仔细。默认情况下,mysql_connect返回具有相同服务器参数的多次呼叫的相同连接ID ,这意味着如果你这样做

<?php
  $db1 = mysql_connect(...stuff...);
  $db2 = mysql_connect(...stuff...);
  mysql_select_db('db1', $db1);
  mysql_select_db('db2', $db2);
?>

然后$ db1实际上会选择数据库&#39; db2&#39;,因为第二次调用mysql_connect只返回已经打开的连接ID! 你有两个选择,你必须在每次查询之前调用mysql_select_db,或者如果你使用php4.2 +,mysql_connect有一个参数来强制创建一个新的链接。

使用以下链接推荐。您在此处提出的问题。

PHP Documentation

答案 4 :(得分:1)

是的,您可以在一个应用程序中使用多个数据库,但最重要的是当您使用dbname进行通信时,您还必须指定该dbname,以便脚本只与您定义的数据库进行通信。实施例

$db1 = mysql_connect(...stuff...);
  $db2 = mysql_connect(...stuff...);
  mysql_select_db('db1', $db1);
  mysql_select_db('db2', $db2);

    $resultsa = mysql_query('SELECT * FROM table_a', $dbname) or die('Could not query database_a');

答案 5 :(得分:0)

是的,你可以用非常基本的术语来表达:

http://au1.php.net/function.mysql-connect

$conn = mysql_open($host, $username, $password, true);

连接到同一服务器上的多个数据库:

$dblink1 = mysql_select_db('database_a', $conn);
$dblink2 = mysql_select_db('database_b', $conn);

从两个数据库中获取结果:

$resultsa = mysql_query('SELECT * FROM table_a', $dblink1) or die('Could not query database_a');
$resultsb = mysql_query('SELECT * FROM table_b', $dblink2) or die('Could not query database_b');

编辑 - 请记住,mysql_函数在最近的PHP版本中不可用,因为它们已被删除。

  

警告

     

自PHP 5.5.0起,此扩展程序已弃用,并将在中删除   未来。相反,应该使用MySQLi或PDO_MySQL扩展。   另请参阅MySQL:选择API指南和相关常见问题解答以获取更多信息   信息。

答案 6 :(得分:0)

是的,您可以连接多个数据库。

  • 打开您的php.ini文件,并提供您的数据库详细信息,如

  • 端口号,用户名,密码。

之后,您可以在应用程序中提供这样的查询

$db1 = mysql_connect($hostname, $username, $password); 
$db2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $db1);
mysql_select_db('database2', $db2);

然后查询数据库1,执行以下操作:

mysql_query('select * from tablename', $dbh1);

,对于数据库2:

mysql_query('select * from tablename', $dbh2);

我认为这对你的问题很好。