2010-03-03 31 views
5
  1. 我目前正在对使用MySQL数据库为它的后台
  2. 我的所有查询的PHP应用程序包含反引号逃脱字段名。这样我就可以在查询中拥有像“密码”这样的字段而不会造成问题(请参阅示例)
  3. 我知道反向引用在关系数据库引擎之间不是通用的(例如,SQLite使用双引号)
  4. 所有在我的PHP应用程序中的查询使用PHP的PDO接口执行

我的问题是这样的:如果我想切换的数据库引擎,从MySQL到SQLite的说,我需要什么做处理反引号中我所有的疑问?我真的不想要通过我所有的代码,并更改/删除反引号。有什么建议么?我是否在最佳实践的范围内做错了事情?处理MySQL的反引号使用PHP的PDO界面切换DB引擎

示例查询:

SELECT 
    `username`, 
    `password`, 
    `email_address` 
FROM 
    `users` 
WHERE 
    `id` = '1' 

回答

4

其实,password并不真正需要被引用......它甚至不是一个保留字:http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

恕我直言,你可以采取的最好的办法是:

  1. 不要在您的标识符将保留字。
  2. 删除当前代码中的引号;这是一个2分钟的任务与任何像样的编辑器(除非你也使用反向操作符)

无论如何,切换到另一个数据库引擎是一回事;构建一个独立于数据库的应用程序是一个完全不同的问题。

+0

这是合理的建议,从现在开始我会做。 – 2010-03-03 18:26:35

4

不要使用保留的话,你不惹上麻烦,当你不使用反引号。摆脱所有反引号,它不是SQL标准,所有其他数据库都会遇到问题。标准中使用双引号,大多数数据库都支持它们。但是,再次,不要使用重新出现的单词,而且你不需要它们。

配置MySQL服务器(-connection)使用ANSI-QUOTES和MySQL还将把双引号,因为它应该在第一时间做了:作为标识符

+3

将保留字用作字段名称是否被认为是“坏习惯”?我使用“密码”作为字段名称的原因是因为它是该字段内容的最清晰和最简洁的描述。我对日期等其他字段(我使用'created_at'和'date_time_created')做了同样的事情。我愿意接受建议/更正。任何建议表示赞赏。 – 2010-03-03 17:32:58

+2

避免保留字是不实际的。我刚刚开始使用sqlite3上的一个表,它具有名为'release'的列,它没有问题。当我在mysql上对同样的东西进行了相同的检查时,它遇到了问题,可能是因为它是保留字。我当然可以改变这个名字,但是如果我没有尝试过mysql,我根本就不会知道。 – haridsv 2011-11-19 19:55:35

+0

RELEASE也是SQLite中的关键字:http://www.sqlite.org/lang_keywords.html它位于SQL:2008关键字列表中。 – 2011-11-19 22:31:56

1

实际上,SQLite与MySQL的反引号风格兼容。

但是,只有遵循@Frank的建议才可以。