使用PHP的PDO接口切换数据库引擎时处理MySQL反引号

时间:2010-03-03 17:02:27

标签: php mysql pdo

  1. 我目前正在开发一个使用MySQL数据库作为其后端的PHP应用程序
  2. 我的所有查询都包含用于转义字段名称的反引号。这样我可以在查询中使用“密码”等字段而不会导致问题(参见示例)
  3. 我知道关系数据库引擎之间的反引号不是通用的(例如,SQLite使用双引号)
  4. 我的php应用程序中的所有查询都是使用PHP的PDO接口执行的
  5. 我的问题是:如果我想切换数据库引擎,比如从MySQL到SQLite,我需要做些什么才能处理所有查询中的反引号?我真的不想要通过我的所有代码并更改/删除反引号。有什么建议?我是否在最佳实践的范围内做错了什么?

    示例查询:

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

3 个答案:

答案 0 :(得分:4)

不要使用保留字,并且在不使用反引号时不会遇到麻烦。摆脱所有反引号,它不是SQL标准,所有其他数据库都会遇到问题。标准中使用双引号,大多数数据库都支持它们。但同样,不要使用复习的单词而你也不需要它们。

配置MySQL服务器(-connection)以使用ANSI-QUOTES,MySQL也会处理双引号,因为它应该首先处理:作为标识符

答案 1 :(得分:4)

实际上,password并不需要引用......它甚至不是保留字:http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

恕我直言,您可以采取的最佳方法是:

  1. 请勿在标识符中使用保留字。
  2. 从当前代码中删除引号;这是一个2分钟的任务与任何体面的编辑器(除非你也使用反引号运算符)
  3. 无论如何,切换到另一个数据库引擎是一回事;构建一个独立于数据库的应用程序是一个完全不同的问题。

答案 2 :(得分:1)

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

但是,只有遵循@Frank建议才会出现反转。