PHP PDO - 即使出现错误也提交到数据库

时间:2014-03-13 22:19:51

标签: php pdo

我有一个像这样设计的标签系统:

标签

CREATE TABLE `tag` (
  `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`tag_id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0;

用户

CREATE TABLE `user` (
  `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0;

tag.user_is是一个外键,每个用户都可以创建新标签(如果是新标签)(之前没有创建过用户)。我在这里使用PDO提交方法的问题,它在第一次出现行时停止并返回此错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'restaurant' for key 'name'

那么,有没有办法告诉PDO引擎即使出现错误也能继续提交?

<?php
  $db->beginTransaction();

  for ($i = 0; $i < count($tags); ++$i)
  {
    $db->execute('INSERT INTO tag(name, user_id) VALUES('.$db->quote($tags[$i]).','.$user_id.')')
  }

  $db->commit();

?>

1 个答案:

答案 0 :(得分:0)

如果您需要在replace into字段上维护唯一约束,为什么不将您的查询编写为insert ... on duplicate key updateinsert或类似的内容而不是name?我认为忽略你的错误通常不是一个好主意。