私は実際になぜPHPのデータベースラッパーが必要なのだろうと思っています。 MySQLiやPDOのラッパーに似ています。 PDO/MySQLiクラスを呼び出すクラスです。なぜ私はそれを必要とすべきですか?利点は?私は1つを作ろうとします - ちょうど私は主要な目標を達成しません。なぜ私はそれが必要ですか? =]なぜデータベースラッパーを作成する必要がありますか?
答えて
PDO
のような抽象化は、物事をより安全にするつもりです。あなたは、あなたがしたいデータベースの実行は、このような何かが防止されることを意味し、「強く型付け」されることを言うことができる:
$myDangerousSql = "select * from dbA where x ='"+$someVariable+"'";
上記sql-injectionと呼ばれるものになる可能性があります。
PDO
を使用している場合は、「xは文字列型」またはデータベースで使用するタイプを明示的に指定します。このようにして、文は「準備」され、新しいSQLコードをSQL文に「挿入」することはできません。それがより安全になります。
これは理由の1つではありますが、最も大きな可能性があります。学習目的でない場合は独自のラッパー/抽象を記述しないでください。既にそこには多くの良いものがあります。
Database abstraction in PHPについての良い投稿です。
ここであなたが何を求めているのかはっきりしません。しかし、私はPDOがすでにあなたが話していると仮定します。それは"data-access abstraction layer"です。つまり、同じコードを使用してさまざまなDBMSと話し合い、コードを変更することなく簡単に切り替えることができます。あなたが切り替えるものと互換性があります)。
MySQLiはMySQLデータベースに直接アクセスするために使用される拡張機能であり、Oracleやその他のDBMSの拡張機能もあります。
あなたの答えをありがとうが、私はすでに1つを持っています。上記をご覧ください。 =] – daGrevis
ええ、私が始めたときはそこにはありませんでした! –
少なくとも2つの理由が考えられます。
1)リファクタリング。テクノロジが変化するため、必要な変更をローカライズする必要があります(迅速かつリスクなしに行うため)。数年前、あなたはMySQLiやPDOを持っていませんでした。古典的なMySQL拡張のラッパーを開発していたならば、すべてのラッパー・クライアントを変更することなく、PDOなどに簡単に切り替えることができました。その一方で、mysql_connect()
からmysqli_connect()
への何百もの呼び出しを置き換えることは魅力的ではありません。
2)テスト容易性。自動化されたテストを実行して間接的な層(ラッパー)を追加すると、簡単に偽のものに置き換えることができます。結果として、クエリが実際にデータベースに移動するかどうか、またはたとえばファイルに記録されるかどうかを制御できます。その結果、より迅速で管理しやすいテストが可能になります。
PDOの上にラッパーを使用する場合は、書き込みを行わず、既に書き込まれたロットがあります。あなたはDoctrine、ActiveRecord、Zend_Dbなどを持っています。
- 1. なぜ何度も配列を作成する必要がありますか?
- 2. LinkedListなぜここにダミーを作成する必要がありますか?
- 3. MOSS 2007 - カスタムワークフローを作成する必要がありますか?
- 4. サブクラスNSManagedObjectを作成する必要がありますか?
- 5. テストファイルにヘルパーメソッドを作成する必要がありますか?
- 6. DateRangeオブジェクトを作成する必要がありますか?
- 7. エンティティのインタフェースを作成する必要がありますか?
- 8. なぜvalue.lengthを使用する必要がありますか?
- 9. なぜPOSTデータをネストする必要がありますか?
- 10. なぜredux-thunksをディスパッチする必要がありますか?
- 11. なぜメッセージハブをポーリングする必要がありますか?
- 12. なぜ変数をリセットする必要がありますか?
- 13. Reflect.construct()なぜオブジェクトプロトタイプをオーバーライドする必要がありますか?
- 14. なぜレンダリングをカウントする必要がありますか?
- 15. なぜstopPropagation()を使用する必要がありますか?
- 16. なぜmochaはdevDependenciesになる必要がありますか?
- 17. スプリングステートマシン - 作成する必要がありますか?
- 18. なぜopengl32.libにリンクする必要がありますか
- 19. qtsql-querymodel-editablesqlmodel:なぜリフレッシュする必要がありますか?
- 20. AjaxUpload:なぜ2回クリックする必要がありますか?
- 21. なぜhtml_safeに注意する必要がありますか?
- 22. なぜ使用する必要がありますか?
- 23. Joomlaカスタムコンポーネントがメニューを作成する必要があります
- 24. なぜresolve()を呼び出す必要がありますか?
- 25. なぜ行番号を渡す必要がありますか?
- 26. セレンページオブジェクト:なぜこれを返す必要がありますか?
- 27. gammuはなぜsudoを動作させる必要がありますか?
- 28. djangoはなぜテストを実行するためにmysqlデータベースを作成する必要がありますか?
- 29. いつプロキシサービスを作成する必要がありますか?いつRest APIを作成する必要がありますか?
- 30. どのようなプロジェクトを作成する必要がありますか?
短い答え:ありません。 –
PDOはすでにラッパーです。クラスを拡張して、必要なものと提供されていないものを追加することもできますが、そうでない場合は独自のラッパーを構築することはかなり大きな仕事です。 –