mysql,sqlite和pgsql之间的语法差异

时间:2010-11-28 12:09:02

标签: php mysql sqlite postgresql pdo

我正在使用PDO创建一个小型的activerecord库,我计划支持 MySQL Sqlite PgSQL

我的问题是如何确定查询字符串适用于所有适配器?主要有CRUD语句和一些连接等。我可以遵循的标准适用于所有这些吗?

由于 /托比亚斯

编辑:感谢你的所有答案,但我的问题更多的是关于它们之间的SQL'语法'差异。

3 个答案:

答案 0 :(得分:2)

如果您想编写自己的数据库图层,我建议您:

  1. 如果您还没有占位符,请使用占位符。他们也增加了安全性。
  2. 将bindParam / bindValue与值类型一起使用(例如,在SQLite中不存在BOOLEANS,但如果与PARAM_BOOL绑定则可以工作)...
  3. 使用MySQL的存储过程,在PostgreSQL中创建匹配的名称,并使用sqliteCreateAggregate / sqliteCreateFunction在SQLite中定义它们。
  4. 在PHP中执行所有参数检查,因为SQLite不会执行任何操作(例如验证日期变量)...
  5. 使用InnoDB for MySQL获取交易。
  6. 注意:通过支持这些截然不同的RDBM,您将数据库降级为数据存储。请记住,SQLite非常有限。它没有从数字/字符串保存的本机数据类型。例如。它缺少日期处理和间隔,等等。所有三个数据库都支持事务,这些事务在数据库外部维护完整性时对数据完整性至关重要。

    编辑:删除了提及5.0的MySQL触发器。

答案 1 :(得分:0)

Here你对zend_db_adapter有一个简单的介绍 - 我想你想要类似的东西(我发布这个只是作为一个例子,看看其他人如何解决你的问题)

答案 2 :(得分:0)

我对此类问题的选择是ADOdb。虽然我从未在PostgreSQL中实际使用它,但它只是在一个碰巧与MySQL一起出生的项目中保存了我的理智,然后迁移到SQL Server,迁移到SQLite并返回到SQL Server。