【问题标题】:Error when trying to insert data to MySQL尝试将数据插入 MySQL 时出错
【发布时间】:2019-09-15 13:09:08
【问题描述】:

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

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

但我收到以下错误:

执行'INSERT INTO payment (work_id, task_id,之前,之后,before_after,里程碑,最小值,最大值, hourly_rate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, 空,1,0,0,空,空,空,空]:

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 'before, 附近使用正确的语法, after, before_after, 里程碑, min, max, hourly_rate) VALUES (NULL, NUL' 在第 1 行

这就是我的桌子的样子:

我只想向beforeafterbefore_after 列添加值。所以我不认为我也必须向其他列插入值,因为默认值应该是NULL

我做错了什么?

【问题讨论】:

  • 很遗憾,您选择的列名(beforeafter)在查询中使用时必须括在反引号中。
  • 奇怪的是,默认情况下框架从不向列名添加反引号。

标签: php mysql sql symfony symfony4


【解决方案1】:

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;

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

【讨论】:

  • 很高兴知道这一点。谢谢!
  • 欢迎@RezaSaadati,很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
相关资源
最近更新 更多