我正在使用以下方法向数据库中添加数据:

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;
}

但我得到了以下错误:
执行“插入付款(工作id,
任务id,之前,之后,之前,之后,里程碑,最小值,最大值,
小时费率)值(?, ?, ?, ?, ?, ?, ?, ?, ?)' 参数为[null,
空,1,0,0,空,空,空,空]:
SQLSTATE[42000]:语法错误或访问冲突:1064
SQL语法错误;请查看与
MariaDB服务器版本,用于在'before'附近使用正确的语法,
之后、之前、之后、里程碑、最小、最大、小时费率)值(空,
1号线
我的桌子是这样的:
php - 尝试将数据插入MySQL时出错-LMLPHP
我只想给beforeafterbefore_after列添加值。所以我不认为我也必须向其他列插入值,因为默认值应该是NULL
我做错什么了?

最佳答案

beforeafterreserved 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;

一个更好的选择是简单地将列重命名为其他名称。

10-04 22:05
查看更多