我在一些SELECT查询中使用反引号(`)来转义诸如'first-name'之类的字段。这将适用于MySQL。这些查询通过php应用程序中的DBO类运行,我希望应用程序能够使用其他数据库服务器,例如MSSQL和Posgres。
允许在所有这些数据库服务器中使用有问题的字段名称的最佳方法是什么?我想把这些字段作为一个数组,并用适合每个字符的转义字符引用它们。
[编辑] 为了澄清:我正在构建一个工具,用于将存储在php应用程序中的配置映射到外部数据库的字段。我想逃避这些作为预防措施,因为我不知道实际上会在查询中映射和使用哪些字段名称。
答案 0 :(得分:4)
解决方案非常简单:不要使用保留字作为标识符。它使得代码更难以阅读。
如果你真的需要来使用这些词语(例如“有一些模糊的理由超出你的控制范围”),你可以用任意字符作为所有标识符的前缀,例如{{1例如。
答案 1 :(得分:2)
跨DBMS机制(在SQL-92和其他标准中定义)使用双引号分隔标识符。根据{{3}},它得到了广泛的支持。
MySQL允许this reference没有任何价值,因此在发出任何查询之前,您仍需要确保会话设置正确。
答案 2 :(得分:1)
MySQL默认使用反引号(`),但可以配置为支持正确的ANSI引用。
IMO:如果您要连接到MySQL,请将其设置为ANSI模式,当您使用它时,启用它所具有的每个STRICT选项。编写那些随便可用的代码变得容易得多。
当然,最好的选择必须是不使用保留字,但保留字列表可能会随着时间的推移而改变,所以严格的引用并不是一个坏主意。
答案 3 :(得分:0)
正确的转义方法不是使用需要转义的字段名称。
如果您仍然需要使用转义 - 请使用"
。它是标准的(由ANSI SQL定义)。
Postgres和Oracle了解"
转义。但我不知道MSSQL是一个MySQL。