0

I have an error in my sql on second addSql() line:

$this->addSql('CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, `key` VARCHAR(60) NOT NULL, value VARCHAR(60) NOT NULL, UNIQUE INDEX UNIQ_E545A0C58A90ABA9 (`key`), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');

$this->addSql("INSERT INTO user (id,key,value) VALUES (1,'theKey','14')");

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key,value) VALUES (1,'theKey','14')' at line 1

Can someone help to locate it..

Slava Rozhnev
  • 9,510
  • 6
  • 23
  • 39
joopeerr
  • 183
  • 1
  • 1
  • 12

2 Answers2

1

The 'key` word is reserved word in MySQL. I advice to avoid using reserved as column names. Any way is it necessary use backticks to quote them:

$this->addSql('CREATE TABLE user (`id` INT AUTO_INCREMENT NOT NULL, `key` VARCHAR(60) NOT NULL, `value` VARCHAR(60) NOT NULL, UNIQUE INDEX UNIQ_E545A0C58A90ABA9 (`key`), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');

$this->addSql("INSERT INTO user (`id`, `key`, `value`) VALUES (1,'theKey','14')");

Test it on SQLize.online

Slava Rozhnev
  • 9,510
  • 6
  • 23
  • 39
0

changing VALUE to VALUES should do the trick

Andy Edgar
  • 86
  • 1
  • 5