目前我通过此
连接到数据库服务器@$db_connect = mysql_connect('localhost','user','xxx', true);
由于在同一查询中使用多个数据库进行查询,我必须连接到数据库服务器(不是特定的数据库名称)。
有人可以建议我如何用PDO做同样的事情吗?
答案 0 :(得分:2)
您仍需要选择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
");
答案 1 :(得分:1)
您可以在PDO中执行相同的操作。 MySQL DSN string的dbname
属性是可选的。
$db = new PDO('mysql:host=localhost', $user, $pass);
但是,在这种情况下,您需要执行use databasename
或确保所有查询都使用格式SELECT * FROM databasename.tablename
。