CDbCommand无法执行SQL语句:SQLSTATE [HY000]:常规错误:1364

时间:2014-09-01 09:53:01

标签: php mysql yii

我正在关注Yii Blog tutorial,并在执行评论部分时遇到此错误。

CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1364 Field 'post_id' doesn't have a default value. The SQL statement executed was: INSERT INTO `tbl_comment` (`status`, `content`, `author`, `email`, `url`, `create_time`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5) 

同样的错误首先是状态,但是我在数据库中为它设置了默认值。但这次是post_id,我不知道如何解决这个问题。帖子ID是另一张表中的FK。 Here是整个数据库设计。

谢谢!

1 个答案:

答案 0 :(得分:2)

看起来您的“post_id”属性(可能是您的主键)未设置为“自动增量”或在数据库中设置为“非空”。看看下面的ORM。将其与您的产品进行比较并修复数据库错误。并且不要忘记通过升级您的模型。 GII!

enter image description here

-- -----------------------------------------------------
-- Table `mydb`.`tbl_comment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`tbl_comment` ;

CREATE TABLE IF NOT EXISTS `mydb`.`tbl_comment` (
  `post_id` INT NOT NULL,
  `status` VARCHAR(45) NULL,
  `content` TEXT NULL COMMENT ' ',
  `author` VARCHAR(255) NULL,
  `email` VARCHAR(255) NULL,
  `url` VARCHAR(511) NULL,
  `create_time` DATETIME NULL,
  PRIMARY KEY (`post_id`))
ENGINE = InnoDB;

否则,如果“post_id”不是您的主键并且未设置为“自动增量”,您可以尝试将其修复:

解决方案1)在php中保存/更新之前设置“post_id”,如:

$model = new Tbl_comment; //hope this is your Yii model name...
$model->post_id = 123

if(!$model->save()) {
   var_dump($model->errors);
}

解决方案2)在属性“post_id”上的数据库ORM中添加默认值。 (因为我不知道你的关系和ORM是对的。)

enter image description here

-----------------------------------------
-- Table `mydb`.`tbl_comment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`tbl_comment` ;

CREATE TABLE IF NOT EXISTS `mydb`.`tbl_comment` (
  `post_id` INT NULL DEFAULT someDefault,
  `status` VARCHAR(45) NULL,
  `content` TEXT NULL COMMENT ' ',
  `author` VARCHAR(255) NULL,
  `email` VARCHAR(255) NULL,
  `url` VARCHAR(511) NULL,
  `create_time` DATETIME NULL)
ENGINE = InnoDB;

表详情:

enter image description here