2012-01-04 8 views
1

私はあなたが何かを行うことによって用のドライバを持っているものは何でも、データベースに複数の接続を作成することができます学習目的のためにデータベース抽象クラスを作成して遊んでました:PDOがあるので、抽象的なデータベース処理には意味がありますか?

//Create multiple database connections 
$db1 = new DatabaseFactory("MySQL","root","","localhost"); 
$db2 = new DatabaseFactory("MySQL","root","","localhost"); 

か...

$db = new DatabaseFactory("SQLite"); 

しかし、私はそれについて考えなければなりません。そして、あなたがファクトリオブジェクトで複数の接続を管理する必要がなければ、PDOの出現に伴い、本当にこのようなものは必要ありませんか?

私の質問は、PDOへの抽象化のレイヤーがさらにあると便利だと思います、なぜですか?

答えて

1

ORMのようなものではなく、厳密にデータベースレベルの操作抽象化を考えると、依然として異なるデータベース間でSQLサポートの問題があります。

たとえば、SQLite、Postgre、およびMySQLを比較すると、すべて同じ構文の多くをサポートしますが、束との間にはさまざまな違いがあります。

PDOは、プラットフォーム間のSQLサポートの差異を抽象化するための手段をとっていません。

また、別のレイヤーを使用して隠すことのできるものがいくつかあります。しかし、それが可能かどうかは疑わしいです。たとえば、SQLiteなどで外部キーチェックをエミュレートするためにソフトウェアを使用しようとした場合を考えてみましょう。

+0

特定のデータベースを使用する場合、それは特定のSQLのニュアンスを理解していることを前提としています。同じトークンで、私はあなたが何を意味するかを見ます。ある日、データベースをMySQLからPostgreに切り替えると、私が使用している既存のSQL文のためにアプリケーションが壊れる可能性があります。 –

+0

@cillosis開発のためにsqliteを使用する人や、生産のための他の重いデータベースを好む人もいます。私は自分自身のファンではありませんが、私はあなたの開発マシンで最小限の環境を持っていることの魅力を見ることができます。私のコードの多くがデータベース特有のものでなければ、私はおそらくそれを自分でやっていました。 –

0

PDOは以前のmysql関数バケットよりも大幅に改善されていますが、依然としてデータベースにアクセスするための非常に低いレベルのAPIです。

ほとんどの状況で、より高いレベルのAPIをその周囲にラップすることはまだ理にかなっています。

たとえば、より高度なAPIを使用すると、SQLインジェクション攻撃を事実上不可能にすることができます。

+3

プリペアド・クエリにAPIを使用すると、PDOはこれを既に実行しています(SQL注入防止) –

+0

+1! –

+0

もちろん、ラッパーはPDOに組み込まれたセキュリティ機能を利用することもできます。これにより、アクセスするためのより良い方法が提供されます。 –

関連する問題