php – 将Yii ActiveRecord模型插入mysql表时出错

我不时在我的网站上发生以下类型的错误.

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 ;

我也遇到了其他表的这种错误,所有这些表都是有很多行的表,主要用于统计数据.

事实是,我只能看到它无法插入,但没有错误,如:主键问题,服务繁忙或任何事情.

解决方法:

尝试

var_dump($SEO_keyword->getErrors());

$SEO_keyword->save();

并了解实际问题是什么,以便插入查询失败.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...