【发布时间】:2012-07-13 14:13:48
【问题描述】:
我的网站时常出现以下错误。
2012/07/12 21:21:48 [error] [system.db.CDbCommand] Error in executing
SQL: INSERT INTO `seo_page` (`grouped`, `results_count`, `page`, `operation`, `subtype`, `type`, `state`, `zone`, `city`, `district`, `custom`, `property`, `date_add`, `date_upd`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5, :yp6, :yp7, :yp8, :yp9, :yp10, :yp11, :yp12, :yp13)
基本上,代码可以正常工作,并且可以正确保存模型,我认为只有在尝试使用相同的主键同时进行两次插入时才会出现这种错误,或者它不能确保插入前关键字字段的唯一性。
在数据库中插入或更新关键字的脚本,代码如下:
static public function quickAdd($keyword) {
if (strlen($keyword['name'])==0)
return;
$seo_keyword = SeoKeyword::model()->find("keyword=:keyword", array("keyword"=>$keyword['name']));
if ($seo_keyword) {
// return;
} else {
$seo_keyword=new SeoKeyword();
}
$seo_keyword->keyword=$keyword['name'];
if (is_numeric($keyword['position'])) {
$seo_keyword->position=$keyword['position'];
}
try {
$seo_keyword->save();
} catch (Exception $e) {
}
return $seo_keyword;
}
mysql 表如下所示:
CREATE TABLE IF NOT EXISTS `seo_keyword` (
`id_seo_keyword` int(11) NOT NULL AUTO_INCREMENT,
`keyword` varchar(255) NOT NULL,
`position` int(11) DEFAULT NULL,
`date_add` datetime NOT NULL,
`date_upd` datetime NOT NULL,
PRIMARY KEY (`id_seo_keyword`),
UNIQUE KEY `keyword` (`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
我在使用其他表时也遇到了这种错误,它们都是具有很多行并且主要用于统计数据的表。
事实是我只能看到它无法插入,但没有错误,例如:主键问题,服务器忙或其他任何错误。
【问题讨论】:
-
这是
keyword上的唯一键,这是你的原因。