【问题标题】:Moving rows from tables in one database to another database using PDO使用 PDO 将行从一个数据库中的表移动到另一个数据库
【发布时间】:2015-06-30 21:11:47
【问题描述】:

第一个问题,我一直在不懈地寻找答案,但似乎人们在指表时会问“从一个数据库到另一个”。总之……

我有一个数据库,里面有很多表格,记录了各种游戏绘图的结果。这些表有许多不同的结构,最少的有 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 工作?如果我有手动构建语句来插入,那会很痛苦,因为每个表都有不同的结构。

【问题讨论】:

  • 您缺少 SELECT 关键字。编写返回所需行的SELECT 查询。然后在此之前添加 INSERT INTO foo (cols)`,将其转换为 INSERT .. SELECT 语句。

标签: php mysql database pdo


【解决方案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

【讨论】:

  • 非常感谢,刚刚试了一下,成功地将记录从一个数据库传输到另一个数据库,然后将其删除。由于缺少 SELECT,为我节省了很多工作!
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多