Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,我可以在一个应用程序中使用多个数据库吗?_Php_Mysql - Fatal编程技术网

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

在php中,我可以在一个应用程序中使用多个数据库吗?,php,mysql,Php,Mysql,我正在开发与数据库操作相关的简单应用程序。 我的疑问是我如何能同时连接到多个数据库 php如何知道数据将存储哪些数据库 如果用户输入要输入哪个数据库的数据,则输入两个数据库或一个数据库 请回答我的问题。我为这个问题苦苦挣扎。是的,你可以。。通过使用两个连接字符串 $mysqli1 = new mysqli('HOST1', 'USER1', 'PASSWORD1', 'DB_NAME1'); $mysqli2 = new mysqli('HOST2', 'USER2', 'PASSWOR

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

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

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

  • 如果用户输入要输入哪个数据库的数据,则输入两个数据库或一个数据库


请回答我的问题。我为这个问题苦苦挣扎。是的,你可以。。通过使用两个连接字符串

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


$mysqli2 = new mysqli('HOST2', 'USER2', 'PASSWORD2', 'DB_NAME2');
您的查询应该是

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


是的,你可以,基本上,你可以这样做:

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";
}

要连接到同一服务器上的多个数据库,请执行以下操作:

$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_u函数在最近的PHP版本中不可用,因为它们已被删除

警告

从PHP5.5.0开始,此扩展已被弃用,并将在中删除 未来。相反,应该使用MySQLi或PDO_MySQL扩展。 有关更多信息,请参见MySQL:选择API指南和相关常见问题解答 信息


当然,如果需要,您可以在下面的示例中添加更多连接:

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

}

如果同时在同一台服务器上使用两个数据库,请小心。默认情况下,mysql_connect使用相同的服务器参数为多个调用返回相同的连接ID,这意味着如果

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

那么$db1实际上已经选择了数据库“db2”,因为对mysql\u connect的第二次调用刚刚返回了已经打开的连接ID! 这里有两个选项,即在每次查询之前必须调用mysql\u select\u db,或者如果使用php4.2+,则mysql\u connect中有一个参数用于强制创建新链接

请使用下面的链接参考您在此处提出的问题。


是的,您可以在一个应用程序中使用多个数据库,但最重要的是,当您与数据库名通信时,您必须指定该数据库名,以便脚本仅与您定义的数据库通信。前

$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');

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

  • 打开你的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);
mysql_query('select * from tablename', $dbh2);
对于数据库2:

mysql_query('select * from tablename', $dbh1);
mysql_query('select * from tablename', $dbh2);
我认为这对你的问题来说很好。

如果你使用PHP5(鉴于PHP4已经被弃用,你应该这样做),你应该使用,因为这正在慢慢成为新的标准。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";
}
(当然要替换上面的数据库名、用户名和密码)

然后可以按如下方式查询数据库:

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

您可以编写查询以符合数据库名称(DB.Table)。通过这种方式,您可以使用单个连接在同一服务器上使用多个数据库。连接字符串中指定的数据库是默认数据库(您不需要使用DB.Table限定),我们的数据将存储在该数据库中。dab1或db2mysqli无疑是一种方式,特别是PHP宣布他们将弃用并删除mysql\ufunctions@JustinMitchell他们不会“反对”mysql扩展,他们已经做了,所以这在最新版本中是正确的,但是许多开发人员仍然在使用5.4和更早版本,所以推荐仍然是相关的。应该使用它吗?如果您想升级到最新的PHP版本,可能不会。