如何通过PDO复制记录?

时间:2014-10-23 11:31:52

标签: php mysql pdo

我需要通过PDO复制记录。 你能救我吗?

1 个答案:

答案 0 :(得分:0)

使用INSERT ... SELECT

例如;

INSERT INTO `foo` (`name`)
   (SELECT `name`
   FROM `foo` 
   WHERE `id` = 1)

简而言之,您需要指定字段名称(不要将主键添加到INSERTSELECT上的字段列表中。)

插图示例

CREATE TABLE `dupe` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

INSERT INTO `dupe` (id, name) VALUES(1, 'bar');

所以,现在我们有一个带主键的表,所以我们不能“轻易”复制行。

INSERT INTO `dupe`
SELECT * FROM `dupe` WHERE `name` = 'bar'

[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'

啊,好的。让我们指定要复制的值的字段。

我们希望复制第一行,我们会运行;

INSERT INTO `dupe` (`name`)
SELECT `name` FROM `dupe` WHERE `name` = 'bar';

现在我们已经复制了行,但没有复制主键。

mysql> select * from dupe;
+----+------+
| id | name |
+----+------+
|  1 | bar  |
|  2 | bar  |
+----+------+
2 rows in set