【问题标题】:Using a column name called "before" with PDO在 PDO 中使用名为“之前”的列名
【发布时间】:2017-05-05 20:29:53
【问题描述】:

我正在使用 Cakephp 3,我希望在我的模型中有一个名为“before”的列。

不幸的是,当我尝试创建和保存一个实体时,我收到了这个错误:

[PDOException] SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 'before、after、created_at) VALUES (1047, 'blabla', 'toto', ' 附近使用

我创建这个实体的做法像往常一样

$this->save(
    $this->newEntity([
        'tracker_id' => $trackerEntity->get('id'),
        'before' => 'blabla',
        'after' => $after,
        'created_at' => new \DateTime(),
    ])
);

如果我将列“之前”重命名为另一个名称,例如“toto”,它就可以工作。 MYSQL 函数“之前”存在,所以我猜这就是 PDO 不喜欢它的原因……

有没有人仍然使用具有此名称的列的技巧?喜欢逃避功能的方法吗?

谢谢

【问题讨论】:

标签: php mysql cakephp pdo cakephp-3.0


【解决方案1】:

在 config/app.php 的数据源配置中添加 'quoteIdentifiers' => true 以启用标识符引用,您将能够使用保留字。

【讨论】:

  • 请注意,这会对性能产生影响,因为 ORM 需要做额外的工作。如果您必须有一个以前命名的列,这是一个有用的选项,但如果设计完全在您的控制范围内,那么可能值得尝试考虑一个不是保留字的替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多