2017-03-06 4 views
0

使用しているSQLエンジンとは独立したPHPベースのアプリケーションを作成することが可能かどうか、質問したかったですか?SQLエンジンとは独立したアプリケーションを構築する

(その下で、私はアプリケーションは、PostgreSQL、MySQLおよび多分また、Oracle SQLで実行できることを意味する。)

現在の考え方は、設定ファイルにPDO DSNを残すことで、そのようにクエリがなど他のすべて同じままにしておくことはできますが、テーブル自体に対するCRUDアクションに関していくつかの問題に直面することはできますか?

複雑なものを追加しないと、エンジンにはまったく依存せず、データベース用のPDO DSNしか持てないようにすることができます各SQLエンジンですべて同じ方法でクエリを実行しますか?

よろしくお願いいたします。

+2

独立したい場合は、同じ署名を持つ可能性のあるエンジンごとに「dbドライバ」を作成する必要があります。 – Jerodev

+1

DoctrineなどのORMを使用します。 – ShiraNai7

+1

SQLエンジンが使用するさまざまな方言に応じて、いくつかの問題に直面します。 mySQL、Oracleなどに共通の完全な標準「SQL」構文はありません。ですから、私は@ ShiraNai7に同意することをお勧めします。 –

答えて

2

データベース抽象化レイヤーについて読んでください。 PHPにはかなりのライブラリがあります。 symfonyやLaravelのような一般的なフレームワークを選択した場合、DoctrineかEloquentのどちらかのDBALをすぐに入手できます。両方とも、HQLに基づくIMO同様のクエリ構築機能を提供します。

間違いなくはありません「あなたの方法」と書いてみてください。単純なクエリを実行しても文法は異なりますが、タイプだけではなく、インクリメントなど...

2

すべてのターゲットデータベースでサポートされているSQLの共通サブセットを使用すると、同じPDOインスタンス、同じクエリを使用して、PDO DSNを単に切り替えるだけです。

しかし実際には、最も単純なクエリ以外は、データベースごとに若干異なる方法で実装する必要のあるデータベース固有の機能を使用している可能性があります。簡単に言えば、MySQLに接続されている場合はコードAを実行する必要がありますが、Postgresに接続する場合は少し異なるクエリBを実行する必要があります。

多くの場合if..elseを使用して実装するのではなく、データベース固有のアダプター/ドライバーを使用します。あなたのビジネスコードでは、$database->getUserRecords()が呼び出されます。$databaseがMySQLまたはPostgresのアダプタを使用するかどうかによって、クエリは若干異なります。 (また依存性注入を参照してください。)

あなたは手でこれらのアダプタを実装し、各データベースに対してクエリを微調整することによってこれを行う、または使用してその場で正しいクエリを組み立てることができ、より抽象化されたORM/DBALを使用できますデータベース固有のクエリー・ビルダー。これには多くの既存の図書館があります。

関連する問題