使用PDO将行从一个数据库中的表移动到另一个数据库

时间:2015-06-30 21:11:48

标签: php mysql database pdo

第一个问题,我已经无情地搜索了答案,但似乎人们似乎要求从一个数据库到另一个数据库"当他们的意思是表。反正...

我有一个充满表格的数据库,记录各种游戏绘图的结果。这些表有许多不同的结构,最少有5个字段,最大的有20个。我还有一个数据库,其中包含这些游戏超过一年的结果表。所以在db1中我有game1,在db2中我有game1_archive。我写的是一个每天运行一次的脚本,并将来自超过一年的db1表中的任何条目移动到相应的db2表。

我在db1中有一个表列表来迭代:

try {
    $db1_pdo = new PDO($db_game, $db_username, $db_password);
    $db2_pdo = new PDO($db_archive, $db_username, $db_password);
} catch (PDOException $exception) {
    echo 'Connection failed: ' . $exception->getMessage();
    die();
}

$cutoff_date = date('Y-m-d', time() - (366 * 24 * 60 * 60));

$tables = array();
$result = $db1_pdo->query("SHOW TABLES");
$tables = $result->fetchAll(PDO::FETCH_COLUMN, 0);

最容易做的只是INSERT INTO _ FROM _ WHERE _查询,如下所示:

foreach ($tables as $table) {
    $result = $db1_pdo->query("INSERT INTO archive.$table"."_archive * FROM $table WHERE drawing_date < '$cutoff_date'");
    $db1_pdo->query("DELETE FROM $table WHERE drawing_date < '$cutoff_date'");
}

但这不起作用,我认为因为db1_pdo无法访问这两个数据库?访问两个数据库的用户名和密码是相同的。是否有一种简单的方法可以让INSERT INTO工作?如果我手工构建语句到INSERT,那将是一个痛苦,因为每个表都有不同的结构。

1 个答案:

答案 0 :(得分:1)

我认为使用INSERT INTO ... SELECT ...方法可以适用于您的情况

$result = $db1_pdo->query("INSERT INTO archive.$table"."_archive SELECT * FROM $table WHERE drawing_date < '$cutoff_date'");

有关此语法的更多信息,请访问:https://dev.mysql.com/doc/refman/5.0/en/insert-select.html