与PHP一起使用的数据库共享相同(或大多数)的SQL语法?

时间:2009-02-26 10:51:04

标签: php mysql pdo

我读过虽然SQL是标准化的,但它与不同的数据库实现不同。我只使用MySQL作为数据库。

我想知道的是其他数据库共享相同的语法?我现在正在使用PDO,我想设置一个标志,允许用户指定他们想要使用的数据库。

我很想知道哪些是'安全'数据库,它们将处理大多数(如果不是全部)我的常规MySQL查询。主要是SELECT,INSERT,UPDATE,DROP,DELETE。

由于

3 个答案:

答案 0 :(得分:3)

有一些名为ANSI SQL的修订版。

所有主要的数据库引擎(OracleMS SQLPostgreSQLMySQL)理论上都应支持SQL-92

这包括您提到的所有内容:SELECTINSERTUPDATEDROPDELETE,只要您不使用复杂内容与他们的条款。

在实践中:

  1. 并非所有数据库都支持全套SQL-92

    即使在SQL中编写跨平台SQL-92也需要进行大量测试。

  2. 当您插入SQL行并需要优化查询时,1001st中的平台独立性会结束。

    如果您浏览标记为StackOverflow的{​​{1}}个问题,您会看到大多数人说“帮助我优化此查询”,大多数答案都说“使用此平台依赖的黑客

答案 1 :(得分:1)

您会发现某些数据库存储数据类型不同,例如,mysql将布尔值存储为1和0,而postgres将它们存储为“t”和“f”。

只要您的数据库类知道转换数据的需要,您应该没问题,可能96.3482%的日常CRUD将全面运行。

即使您创建直接调用PDO的数据库类,您也可以稍后为数据转换或查询修改添加一些逻辑。

您可以使用数据库抽象层ADOdb(它得到了植物的渴望)

我建议您确保在花费大量时间开发可能不需要的功能之前,您的客户实际上已经知道他们需要运行哪个数据库。

答案 2 :(得分:0)

标准化SQL92在所有RDBMS中几乎相同。差异部分是标准没有定义的部分,例如LIMIT或日期时间处理函数,当然还有程序语言。 至于受PHP欢迎的数据库:在MySQL,SQLite和PostgreSQL之间移植SQL并不难。使用Oracle,Sybase和DB / 2并不容易。