尝试将数据插入 MySQL 时出错
Error when trying to insert data to MySQL
我正在使用以下方法向数据库添加数据:
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;
}
但是我得到以下错误:
An exception occurred while executing 'INSERT INTO payment (work_id,
task_id, before, after, before_after, milestone, min, max,
hourly_rate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null,
null, 1, 0, 0, null, null, null, null]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
error in your SQL syntax; check the manual that corresponds to your
MariaDB server version for the right syntax to use near 'before,
after, before_after, milestone, min, max, hourly_rate) VALUES (NULL,
NUL' at line 1
这是我的 table 的样子:
我只想向 before
、after
和 before_after
列添加值。所以我不认为我也必须向其他列插入值,因为默认值应该是 NULL
.
我做错了什么?
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;
更好的选择是将列重命名为其他名称。
我正在使用以下方法向数据库添加数据:
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;
}
但是我得到以下错误:
An exception occurred while executing 'INSERT INTO payment (work_id, task_id, before, after, before_after, milestone, min, max, hourly_rate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, null, 1, 0, 0, null, null, null, null]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'before, after, before_after, milestone, min, max, hourly_rate) VALUES (NULL, NUL' at line 1
这是我的 table 的样子:
我只想向 before
、after
和 before_after
列添加值。所以我不认为我也必须向其他列插入值,因为默认值应该是 NULL
.
我做错了什么?
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;
更好的选择是将列重命名为其他名称。