Php 不向MySql查询中的字段名称添加单引号
我有以下mysql表:Php 不向MySql查询中的字段名称添加单引号,php,mysql,database,orm,propel,Php,Mysql,Database,Orm,Propel,我有以下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` TE
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;
问题在于,MySQL中的match字段是保留字,而propel2在运行时(当生成查询时)不会在字段名称周围加上一个引号来转义保留字。
我想知道是否有理由强制使用单引号转义所有表字段以避免保留字错误。
我得到的错误是:
Unable to execute SELECT statement [SELECT id, include, dimension, media_type, match, content FROM content_segments WHERE id = :p0]
解决方案在关于推进git存储库的问题讨论中 我们已经改变了标识符引用的工作方式。你需要 按数据库或表激活它:
或
正如在问题的评论中所述,相关的推进问题是针对propel2的“用单引号转义所有我的表字段”-您的意思是勾号
`
而不是“引号”'
或“
。是的,这正是我的意思。不幸的是,我对推进一无所知。快速修复方法是使用另一个单词,例如匹配
,如果可能的话,尽量远离保留字。我考虑过这一点,但这是一个遗留表,在不中断现有代码的情况下,很难更改字段名。这似乎是一个已知的问题,也是正确的
<database ... identifierQuoting="true">
or
<table ... identifierQuoting="true">