2011-01-21 7 views
1

ほとんどのアプリケーションは、直接データアクセスのためにストアドプロシージャを指定するほうがはるかに慎重であると思われるPHPの中でクエリを生成しています。ストアドプロシージャを避ける理由はありますか?すべてのクエリでストアドプロシージャを使用しない理由は何ですか?

+0

可能重複します(http://のstackoverflow。com/questions/4040426/use-of-storedprocs-in-an-application) –

答えて

4

これは、あなたが誰に依頼するかによって、ほとんど宗教的な議論になります。デベロッパー& dbasがこの種のケースで調整する必要がある微妙なバランスがあります。

PHPコードは、動的SQLを使用している場合は、SQLインジェクション攻撃に対する保護を常に考慮する必要があります。

は、基本的にはここにあなたが本当に遊びに入れたい考え方です。入力は、データベースに入れる前に消毒しなければならない(MUST)。

PHPコードで動的SQLが使用されているが、プリペアドステートメントを使用するのが慣例である場合は、ある程度は安全ですが、プリペアドステートメントの使用方法には注意が必要です。

PHPコードがストアドプロシージャを使用している場合、SQLの制御の多くは開発者から削除され、DBAは開発者と協力してニーズに合った適切なソリューションを提供します。これは、残念なことに、多くの時間と労力を要し、開発/保守を行き来する可能性があります。

グレーの領域であり、両者が特定の観点から見ているので、方程式のどちら側が正しいかという考え方がたくさんあります。

0

このようなものはありません。私が見ている限り、それはプログラマーの快適さの問題です。

2つの主なことは、ストアドプロシージャはコード内のクエリよりもはるかに高速ですが、少しだけコードが追加されていることです。 コード内のクエリは、(人々が言うように)先進的な方法であり、.NETのLINQが導入された理由です。それらは重要ではない場合には、n層アーキテクチャから揺れ動くことができます。

+0

このコメントはただの炎症です。 「データベース環境」で作業するために「プログラマは怠惰でなければならない」という声明を作成することは正しいことではありません。 –

+0

あなたはその声明が不適切であると感じた場合に謝罪します。私はそれを削除しました。次回は私の言葉や声明を見ます。私を修正してくれてありがとう。 –

1

理由と理由があります。

今日では、コマンドとクエリの分離などの行がぼやけています。たとえば、私のテーブルをORMで好きなように照会することはできますが、に書き込み用に保存されたprocsを使用します。

標準のDBプラットフォームを使用しているcorpoarate shopにいますか?または複数のDBエンジンをサポートするベンダーですか?

データがコードをoutlives:あなたは、毎年またはので、あなたのDALのリポジトリをリファクタリングます:保存されprocsのは、あなたがいくつかのクライアントのために一貫性のある「API」を提供することができます

を変更する必要はありません。我々は、外部のC#を持って、エクセル、Java +私たち自身のC#。

ストアドプロシージャは、おそらく、メソッドです:なぜあなたのテーブルをカプセル化しないのですか?

リンク:[アプリケーションにおけるStoredProcsの使用]の

関連する問題