2014-09-01 376 views
1

我在关注Yii Blog tutorial,并且在执行注释部分时出现此错误。CDbCommand无法执行SQL语句:SQLSTATE [HY000]:常规错误:1364

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是整个数据库设计。

谢谢!

+0

您还没有设置在插入查询的POST_ID值。你需要将它的值设置为一个外键 – 2014-09-01 12:43:27

+0

这是,http://codepad.org/EO50vNeN – user1502 2014-09-01 12:54:22

回答

2

看起来像您的“post_id”属性,这可能是您的主键,没有设置为“自动递增”或在数据库中设置为“不为空”。看看下面的ORM。与您的数据进行比较并修复您的DB侧错误。别忘了通过升级你的模型。 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)制作“ POST_ID”设置之前保存/更新中,如PHP:

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

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

解决方案2)在d添加默认值atabase ORM属性“post_id”。 (因为我不知道你们的关系和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

+0

这里是我的模式的ER,http://i.imgur.com/37H2B1j.png?1一次我为post_id设置了默认值,我得到了'id'的异常。 CDbCommand无法执行SQL语句:SQLSTATE [HY000]:常规错误:1364字段'id'没有默认值。执行的SQL语句是:INSERT INTO'tbl_comment'('status','post_id','content','author','email','url','create_time')VALUES(:yp0,:yp1,:yp2 ,:yp3,:yp4,:yp5,:yp6) – user1502 2014-09-02 13:11:53

+0

“id”字段来自哪里?你说你的错误是关于'post_id'的。如果字段'id'也不是PK/NOTNULL/NODEFAULT,将字段'id'配置为PK/NOTNULL/AUTO-INCREMENT ?!它与'post_id'使'id'作为主键并且在其上放置了“自动增量”(工作台中的字段AI)相同,好吗? – lin 2014-09-02 13:28:08

+0

@ user1502,看看我现在添加的最新截图。它向您展示了如何正确配置它。 – lin 2014-09-02 13:38:14

相关问题