推动不在 MySql 查询中的字段名称中添加单引号

Posted

技术标签:

【中文标题】推动不在 MySql 查询中的字段名称中添加单引号【英文标题】:Propel not adding single quote to fields name in MySql query 【发布时间】: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 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于推动不在 MySql 查询中的字段名称中添加单引号的主要内容,如果未能解决你的问题,请参考以下文章

[mysql-connector-python在将表作为参数传递时,在表名周围添加单引号。表名来自Flask会话变量

sql系统关键字转义

模糊查询中含有单引号

mysql添加外键语句

mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题

mysql 避免索引失效