2011-02-09 28 views
1

私は実際になぜPHPのデータベースラッパーが必要なのだろうと思っています。 MySQLiやPDOのラッパーに似ています。 PDO/MySQLiクラスを呼び出すクラスです。なぜ私はそれを必要とすべきですか?利点は?私は1つを作ろうとします - ちょうど私は主要な目標を達成しません。なぜ私はそれが必要ですか? =]なぜデータベースラッパーを作成する必要がありますか?

+0

短い答え:ありません。 –

+4

PDOはすでにラッパーです。クラスを拡張して、必要なものと提供されていないものを追加することもできますが、そうでない場合は独自のラッパーを構築することはかなり大きな仕事です。 –

答えて

0

PDOのような抽象化は、物事をより安全にするつもりです。あなたは、あなたがしたいデータベースの実行は、このような何かが防止されることを意味し、「強く型付け」されることを言うことができる:

$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";

上記sql-injectionと呼ばれるものになる可能性があります。

PDOを使用している場合は、「xは文字列型」またはデータベースで使用するタイプを明示的に指定します。このようにして、文は「準備」され、新しいSQLコードをSQL文に「挿入」することはできません。それがより安全になります。

これは理由の1つではありますが、最も大きな可能性があります。学習目的でない場合は独自のラッパー/抽象を記述しないでください。既にそこには多くの良いものがあります。

Database abstraction in PHPについての良い投稿です。

0

ここであなたが何を求めているのかはっきりしません。しかし、私はPDOがすでにあなたが話していると仮定します。それは"data-access abstraction layer"です。つまり、同じコードを使用してさまざまなDBMSと話し合い、コードを変更することなく簡単に切り替えることができます。あなたが切り替えるものと互換性があります)。

MySQLiはMySQLデータベースに直接アクセスするために使用される拡張機能であり、Oracleやその他のDBMSの拡張機能もあります。

+0

あなたの答えをありがとうが、私はすでに1つを持っています。上記をご覧ください。 =] – daGrevis

+1

ええ、私が始めたときはそこにはありませんでした! –

2

少なくとも2つの理由が考えられます。

1)リファクタリング。テクノロジが変化するため、必要な変更をローカライズする必要があります(迅速かつリスクなしに行うため)。数年前、あなたはMySQLiやPDOを持っていませんでした。古典的なMySQL拡張のラッパーを開発していたならば、すべてのラッパー・クライアントを変更することなく、PDOなどに簡単に切り替えることができました。その一方で、mysql_connect()からmysqli_connect()への何百もの呼び出しを置き換えることは魅力的ではありません。

2)テスト容易性。自動化されたテストを実行して間接的な層(ラッパー)を追加すると、簡単に偽のものに置き換えることができます。結果として、クエリが実際にデータベースに移動するかどうか、またはたとえばファイルに記録されるかどうかを制御できます。その結果、より迅速で管理しやすいテストが可能になります。

関連する問題