Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Mysql PDO:连接到数据库服务器(不是特定的数据库名称)_Mysql_Pdo_Database Connection - Fatal编程技术网

Mysql PDO:连接到数据库服务器(不是特定的数据库名称)

Mysql PDO:连接到数据库服务器(不是特定的数据库名称),mysql,pdo,database-connection,Mysql,Pdo,Database Connection,目前我通过此连接到数据库服务器 @$db_connect = mysql_connect('localhost','user','xxx', true); 由于在同一查询中使用多个数据库进行查询,我必须连接到数据库服务器(不是特定的数据库名称) 有谁能建议我如何使用PDO做同样的事情吗?即使要跨多个数据库查询,您仍然需要在PDO$dsn中选择一个数据库。这其实不是问题,因为在查询中,您将使用模式dbname.tablename.columnname。当仅对$dsn中实际指定的数据库进行查询时,

目前我通过此连接到数据库服务器

@$db_connect = mysql_connect('localhost','user','xxx', true);
由于在同一查询中使用多个数据库进行查询,我必须连接到数据库服务器(不是特定的数据库名称)


有谁能建议我如何使用PDO做同样的事情吗?

即使要跨多个数据库查询,您仍然需要在PDO
$dsn
中选择一个数据库。这其实不是问题,因为在查询中,您将使用模式
dbname.tablename.columnname
。当仅对
$dsn
中实际指定的数据库进行查询时,不需要使用
dbname

当然,您需要为连接中指定的用户授予所有数据库的权限

// Need more than just testdb, but specify it here anyway
// It doesn't matter which one you choose here- pick the one you'll use the most I suppose
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

// Query across 2 databases, and specify aliases for the dbname.tablename
$stmt = $dbh->prepare("
  SELECT 
    tdb.col1, 
    other.col2 
  FROM 
    testdb.table1.col1 AS tdb
    JOIN otherdb.table2.col2 AS other 
      ON tdb.col1 = other.col2
");

你可以在PDO中做同样的事情。的
dbname
属性是可选的

$db = new PDO('mysql:host=localhost', $user, $pass);

但是,在这种情况下,您需要执行
use databasename
或确保所有查询都使用格式
SELECT*FROM databasename.tablename

谢谢Michael、Ken和user113215。我明白了。事实上,dbname是可选的,据我所知,实际上并没有在任何地方记录。谢谢你提到这件事。