使用PDO在两个数据库之间传输mysql表

时间:2012-12-20 04:54:31

标签: php mysql pdo

过去一小时我一直在研究这个问题,但是想出一个简单的解决方案,不涉及一些奇怪的出口/进口。

我要做的就是打开一个带有两个数据库的PDO连接,这样我就可以在查询中使用它们。

似乎Stack Overflow中有关于此的不一致。

一个答案:

  

...您需要为单独创建两个PDO对象   连接,如果您想在运行时使用它们。

但是其他人似乎建议你可以在查询中“使用”两个数据库:

$sql = "SELECT * FROM dbname.tablename";

$sql = "SELECT * FROM anotherdbname.anothertablename"

除了在我的PDO连接函数中明确定义的数据库之外,我尝试在另一个数据库上执行SELECT命令。我明白了:

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [42000]:语法错误或访问冲突:1142 SELECT   命令被拒绝用户'dbusername'@'localhost'表   '表名'

我确保将用户添加到两个数据库并授予完全权限。

是否可以在同一连接中使用两个数据库的查询?或者你必须设置两个不同的对象?

3 个答案:

答案 0 :(得分:2)

“具有两个数据库的PDO连接”(单数形式)是用词不当,因为根据定义,PDO连接是到单个数据存储的单个连接。如果需要两个连接,则需要实例化两个实例。

答案 1 :(得分:1)

使用单个PDO连接,可以在两个数据库 之间执行查询。即使在我的PDO启动中定义了一个数据库,我仍然可以访问另一个数据库。

解决方案是使两个数据库具有相同的凭据。

function db_connect(){
$host = 'localhost';
$port = 3306; // This is the default port for MySQL
$database = 'db1';
$username = 'user';
$password = 'pass';

$dsn = "mysql:host=$host;port=$port;dbname=$database";

$db = new PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
}

$db=db_connect();
$statement = $db->prepare("SELECT * FROM db2.table LIMIT 1");
$statement->execute();
$x=$statement->fetchObject();
var_dump($x); //A full row from the table was the output.

答案 2 :(得分:0)

  

我确保将用户添加到两个数据库并授予完全权限。

错误消息非常明确。读这篇文章,我不太确定。

无论如何,要回答标题问题: 为什么不从控制台运行这个简单的查询?

INSERT INTO db2.table SELECT * FROM db1.table;

它不仅会传输您的数据,还会证明您的用户是否拥有足够的权利 如果不是 - 你必须确保这一点。