我正在使用以下方法将数据添加到数据库:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
public sampleClick(){
console.log('!')
}
}
但是出现以下错误:
执行'INSERT INTO付款(work_id, task_id,之前,之后,before_after,里程碑,最小,最大, hourly_rate)VALUES(?,?,?,?,?,?,?,?,?,?)',带有参数[null, null,1、0、0,null,null,null,null]:
SQLSTATE [42000]:语法错误或访问冲突:1064您有一个 您的SQL语法错误;检查与您的手册相对应的手册 MariaDB服务器版本可在'before,附近使用正确的语法, after,before_after,里程碑,min,max,hourly_rate)VALUES(NULL, NUL'位于第1行
这是我的桌子的样子:
我只想将值添加到列public function updatePayment($data) {
$result = 0;
$payment = new Payment();
// Payment is 'before'
if (isset($data['payday'])) {
if ($data['payday'] == 'before') {
$payment->setBefore(1);
$payment->setAfter(0);
$payment->setBeforeAfter(0);
$result = 1;
}
elseif ($data['payday' == 'after']) {
$payment->setBefore(0);
$payment->setAfter(1);
$payment->setBeforeAfter(0);
$result = 1;
}
elseif ($data['payday'] == 'before_after') {
$payment->setBefore(0);
$payment->setAfter(0);
$payment->setBeforeAfter(1);
$result = 1;
}
}
if ($result == 1) {
$this->em->persist($payment);
$this->em->flush();
}
return $result;
}
,before
和after
中。因此,我认为不必将值插入其他列,因为默认值应为before_after
。
我在做什么错了?
答案 0 :(得分:2)
before
和after
是reserved words in MySQL。
您需要使用反引号在查询中将其转义,例如:
INSERT INTO payment
(work_id, task_id, `before`, `after`, before_after, milestone, min, max, hourly_rate)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
在symfony中,类似:
<?php
/** @Column(name="`before`", type="integer") */
private $before;
/** @Column(name="`after`", type="integer") */
private $after;
更好的选择是将列简单地重命名为其他名称。