我正在开发简单的应用程序,即与数据库操作相关的应用程序。
我的疑问是如何同时连接多个数据库。
php如何知道数据将存储哪些数据库。
如果用户输入将输入的数据库,包括数据库或一个数据库。
请回答我的问题。我为这个问题苦苦挣扎。
答案 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有一个参数来强制创建一个新的链接。
使用以下链接推荐。您在此处提出的问题。
答案 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);
我认为这对你的问题很好。