0

我有 2 个具有相同结构的独立数据库。我想将一组选定的行从一个表移动到另一个表。我正在使用 PDO 选择所有行,然后在一个 while 循环中,我假设我可以将每一行插入到新表中,然后从旧表中删除它。

使用普通的 mysql,这是一项非常简单的任务,但我想使用命名空间,以便我可以轻松地修改表结构等。我有以下工作,但它不会将条目移动到新表:

 try {
        $sql = "SELECT * FROM `calls` WHERE `calls`.`status`=0 AND `calls`.`stage` < 4 AND `calls`.`answer` < (NOW() - INTERVAL 10 MINUTE)";
        $query = $this->staging->query($sql);
        while($row = $query->fetch(PDO::FETCH_ASSOC)) {
            $sql = "INSERT INTO `table` (`field1`,`field2`) VALUES (?,?)";
            $query = $this->production->prepare($sql);
            $query->execute($array);
        }
    }
    catch(PDOException $e) {
        $this->informer("FATAL", "Unable to process broken IVR surveys. Error: ".$e->getMessage());
    }
4

3 回答 3

4

您可以立即完成:

INSERT INTO db1.table (fields) SELECT fields FROM db2.table

当然两个数据库必须在同一台机器上

于 2012-06-18T09:37:35.440 回答
0

它可能不起作用,因为您在准备好的语句中使用问号占位符样式,但是将命名数组传递给execute.

如果改为命名参数,它应该可以工作:

$sql = "INSERT INTO `table` (`field1`,`field2`) VALUES (:field1, :field2)";
于 2012-06-18T09:38:35.020 回答
0

另一种方法是在 MySQL 中使用联合表来做你想做的事情。有一些限制....但是这里有一些文档可以帮助您...

http://dev.mysql.com/doc/refman/5.0/en/federated-use.html http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html

于 2012-06-18T09:40:47.773 回答