1

PHP 開発に関する 1 つの質問。計算用のフォーム フィールドを作成しています。Jquery は整数値を計算し、ajax を介して PHP スクリプトに送信します。このスクリプトは、データベースからいくつかの値を選択し、値を計算してフォーム フィールドに返します。

今質問です。私はMysqlに慣れているので、PHP Mysql関数を使用して値を選択しています。その後、データソースは Postgres SQL にする必要があります。データソースから独立するための最良のプログラミング方法は何ですか? この問題に使用するデザイン パターンのようなものはありますか?

よろしく、

トニー

4

2 に答える 2

4

探しているデザイン パターンはQuery Objectです。

データベース クエリを表すオブジェクト。

SQL は複雑な言語である可能性があり、多くの開発者は SQL に特に精通していません。さらに、クエリを作成するには、データベース スキーマがどのようなものかを知る必要があります。これは、パラメータ化されたメソッド内に SQL を隠す特殊なファインダ メソッドを作成することで回避できますが、アドホック クエリの作成が難しくなります。また、データベース スキーマが変更された場合に、SQL ステートメントが重複することにもつながります。

クエリ オブジェクトはインタープリター[Gang of Four]、つまり、SQL クエリを形成できるオブジェクトの構造です。このクエリは、テーブルや列ではなく、クラスやフィールドを参照して作成できます。このようにして、クエリを作成する人はデータベース スキーマとは無関係にクエリを作成でき、スキーマへの変更を 1 か所にローカライズできます。

クエリ オブジェクトを使用すると、パブリック API に SQL はまったくありません。Query オブジェクトの DB ベンダーの適切な SQL への変換は、内部で行われます。これには適切なアダプターの作成が含まれ、SQL データベースに限定されません。


代わりZend_Db_Selectに、SQL クエリを作成するための内部 DSL のようなものを使用することもできます。

ZF リファレンス ガイドの例:

$select = $db->select()
    ->from( ...specify table and columns... )
    ->where( ...specify search criteria... )
    ->order( ...specify sorting criteria... );

ただしZend_Db_Select(および他の場所で言及されているPDO ) は、使用されている DB システムへのアクセスをある程度抽象化しますが、それでも SQL とテーブル構造を知る必要があります。クエリ オブジェクトとは異なり、このような DB 抽象化レイヤーを使用しても、移植性は保証されません

これらのメソッドにどのような引数を入れるかによっては、クエリで特定の DB ベンダーの方言や関数を使用する場合など、移植性のないクエリになる可能性があります。

どちらを選択するかは、クエリによって異なります。標準クエリしかないことがわかっている場合は、クエリ オブジェクトを使用しないでください。データ ソースからの独立性を最大限に高めたい場合は、クエリ オブジェクトを使用します。

于 2012-06-30T12:47:45.840 に答える
2

PHP の標準 SQL 抽象化レイヤーであるPDOを探しているようです。

于 2012-06-30T12:56:39.177 に答える