如何将 PDO 用于特定于数据库的功能?
How to use PDO for database-specific functions?
我需要使用 MySQL 中的特定功能,我不确定其他数据库版本是否可用。例如,
SELECT DATE_SUB(mydate, INTERVAL 5 DAY) AS foo FROM table
使用 PDO 时,对于这种情况,最佳做法是什么?
编辑:
我想问的是,如何确保 DATE_SUB
也适用于所有支持 PDO 的数据库版本?
PDO 将抽象与您的数据库的连接,但除了为所有 DBMS 添加对准备好的语句的支持外,它不会对 SQL 语句执行任何操作。
DBMS 特定功能(例如 MySQL 中的 DATE_SUB()
)和 SQL 版本因此适用于该特定 DBMS(例如 MySQL),但不模拟其他 DBMS(例如 MS SQL 服务器)。
引用 PHP/PDO manual:
PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.
how can I make sure DATE_SUB will also work in all DB flavors that supports PDO?
你不能。
如果你想要一个独立于数据库的层,请查看Doctrine
我需要使用 MySQL 中的特定功能,我不确定其他数据库版本是否可用。例如,
SELECT DATE_SUB(mydate, INTERVAL 5 DAY) AS foo FROM table
使用 PDO 时,对于这种情况,最佳做法是什么?
编辑:
我想问的是,如何确保 DATE_SUB
也适用于所有支持 PDO 的数据库版本?
PDO 将抽象与您的数据库的连接,但除了为所有 DBMS 添加对准备好的语句的支持外,它不会对 SQL 语句执行任何操作。
DBMS 特定功能(例如 MySQL 中的 DATE_SUB()
)和 SQL 版本因此适用于该特定 DBMS(例如 MySQL),但不模拟其他 DBMS(例如 MS SQL 服务器)。
引用 PHP/PDO manual:
PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.
how can I make sure DATE_SUB will also work in all DB flavors that supports PDO?
你不能。
如果你想要一个独立于数据库的层,请查看Doctrine