【问题标题】:Propel not adding single quote to fields name in MySql query推动不在 MySql 查询中的字段名称中添加单引号
【发布时间】:2015-02-03 21:06:34
【问题描述】:

我有以下mysql表:

CREATE TABLE `content_segments`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `include` TINYINT(1) NOT NULL,
    `dimension` VARCHAR(50) NOT NULL,
    `media_type` VARCHAR(50) NOT NULL,
    `match` VARCHAR(50) NOT NULL,
    `content` TEXT NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM;

问题是 ma​​tch 字段是 MySQL 中的保留字,propel2 没有用单引号将字段名括起来以在运行时转义保留字(生成查询时) )。 我想知道是否有理由用单引号强制转义我的所有表字段以避免保留字错误。 我得到的错误是这样的:

Unable to execute SELECT statement [SELECT id, include, dimension, media_type, match, content FROM content_segments WHERE id = :p0]

【问题讨论】:

  • “用单引号转义我的所有表格字段” - 你的意思是勾号 ` 不是“引号”'"
  • 是的,这正是我的意思。
  • 不幸的是,我对 Propel 一无所知。一个快速的解决方法是使用另一个词,例如matches,并尽可能远离保留词。
  • 我想过这个,但它是一个遗留表,很难在不破坏现有代码的情况下更改字段名称。
  • 这似乎是一个已知的 Propel 问题 705 和 Propel2 781

标签: php mysql database orm propel


【解决方案1】:

解决方案在propel git存储库的问题讨论中。

我们改变了标识符引用的工作方式。你需要 每个数据库或每个表激活它:

<database ... identifierQuoting="true">
or
<table ... identifierQuoting="true">

正如问题评论中所述,相关的推进问题是https://github.com/propelorm/Propel2/issues/781 for propel2

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多