Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
Php 使用PDO将行从一个数据库中的表移动到另一个数据库_Php_Mysql_Database_Pdo - Fatal编程技术网

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

Php 使用PDO将行从一个数据库中的表移动到另一个数据库,php,mysql,database,pdo,Php,Mysql,Database,Pdo,第一个问题,我一直在不懈地寻找答案,但人们似乎在问“从一个数据库到另一个数据库”,而他们指的是表。无论如何 我有一个数据库,里面有很多表格,记录了各种游戏绘图的结果。这些表格有许多不同的结构,最少的有5个字段,最大的大约有20个字段。我还有一个数据库,其中包含了这些游戏一年多的结果表。所以在db1中我有game1,在db2中我有game1_归档。我所写的是一个每天运行一次的脚本,并将一年以上的db1表中的任何条目移动到相应的db2表中 我在db1中有一个要迭代的表列表: try { $d

第一个问题,我一直在不懈地寻找答案,但人们似乎在问“从一个数据库到另一个数据库”,而他们指的是表。无论如何

我有一个数据库,里面有很多表格,记录了各种游戏绘图的结果。这些表格有许多不同的结构,最少的有5个字段,最大的大约有20个字段。我还有一个数据库,其中包含了这些游戏一年多的结果表。所以在db1中我有game1,在db2中我有game1_归档。我所写的是一个每天运行一次的脚本,并将一年以上的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);
最简单的方法是插入uFrom uWhere uQuery,如下所示:

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'");
}
foreach($tables作为$table){
$result=$db1_pdo->query(“插入存档.$table”。“$table中的”\u archive*,其中绘图日期<“$cutoff_date”);
$db1_pdo->query(“从$table中删除,其中绘图日期<“$cution_date”);
}

但这不起作用,我想是因为db1_pdo不能同时访问这两个数据库?访问两个数据库的用户名和密码相同。有没有简单的方法让INSERT开始工作?如果我手动插入构建语句,那将是一件痛苦的事情,因为每个表都有不同的结构。

我认为使用INSERT INTO。。。选择。。。这种方法在你的情况下是有效的

$result = $db1_pdo->query("INSERT INTO archive.$table"."_archive SELECT * FROM $table WHERE drawing_date < '$cutoff_date'");
$result=$db1\u pdo->query(“插入存档.$table”。“\u存档从绘图日期所在的$table中选择*”<“$cutoff\u date”);

有关此语法的更多信息,请访问:

您缺少
SELECT
关键字。编写一个
SELECT
查询,返回所需的行。然后将INSERT添加到foo(cols)`之前,将其转换为
INSERT。。选择
statement。非常感谢,您刚刚试用了它,它成功地将记录从一个数据库传输到另一个数据库,然后将其删除。因为缺少选择,我省了很多工作!