使用关键字命名列INSERT INTO错误的语法

时间:2016-04-13 08:48:32

标签: php mysql yii2

我目前正在使用PHP中的简单任务计划器(使用Yii)。

我用

提交查询
 Yii::$app->db->createCommand(...)->execute();

,因为我需要重新格式化我得到的日期,我无法使用

$model->save();

如果我想执行SQL-String,它告诉我:“你的SQL语法有错误”

最终生成的SQL-String如下所示:

INSERT INTO 'date_entry' (uid, `from`, `to`, entrydate, type) 
VALUES 
('62', '2016-04-17 12:04:00', '2016-04-24 12:04:00', '2016-04-13 10:04:33', '1');

我试图将关键字转移到中的“”,[]和``。

如果我通过查询运行它,我会得到同样的错误,到现在为止我感觉很蠢......

希望你能帮助我,谢谢:)

2 个答案:

答案 0 :(得分:1)

我相信它是由于包含表名的单引号

INSERT INTO `date_entry` (uid, `from`, `to`, entrydate, type) 
VALUES ('62', '2016-04-17 12:04:00', '2016-04-24 12:04:00', '2016-04-13 10:04:33', '1');

单引号用于字符串,反引号/括号/双引号,具体取决于DBMS用于保留字,我认为这是你的意图。虽然我怀疑date_entry是一个保留字,所以不需要任何包装它。

答案 1 :(得分:1)

对于mysql,您应该使用反引号(`)而不是单引号(')作为表名:

INSERT INTO `date_entry` (uid, `from`, `to`, entrydate, type) 

为了保持一致性,您还应引用所有字段名称。

同样如上所述,您可以使用$model->beforeSave()格式化保存前的日期。不过,这应该是另一个问题。