第9回 保存先の変更 その3 - OOP講座
がる先生のOOP講座
Lecutures on PHP
第9回 保存先の変更 その3 (その2)
これを、実際に今までのプログラムに少し埋め込んでみます。
埋め込む場所はbbs_dataクラス。…どこで出てきたのか思い返してみると、第一回なんですねぇ。ちょっとびっくりです。
せっかくなので。今までの「ファイルを使うbbs_dataクラス」は潰さないようにしながら、新たに「DBを使うbbs_dataクラス」を作成してみましょう。
本当はもう少し丁寧に「親クラスと子クラス」を作成するのですが、一端ざっくりと切り込んでみます。
list 2
bbs_data_db.inc より
1
class bbs_data_db extends bbs_data
2 {
3
4 // DBにデータを書き出す
5 public function write()
6 {
7 // データの配列を取得する
8 // SQLを作成する
9 // SQLを発行する
10 }
このように継承を使う事で、比較的簡単に機能を追加する事ができます。継承はまた次回に細かくやっていきますので、とりあえず「あぁそういえば継承って単語があったなぁ」程度に思い起こしてみて下さい。
上述ではさらっと「SQLを作成する」と書いていますが、この部分、とっても重要かつ危険ですので注意が特盛りつゆだくだくくらいに必要です。
端的に書きますと。この部分で実装を間違えると、とても簡単に「SQL-Injection脆弱性」が顔を出してきます。
一番よいとされているのは「プリペアドステートメントを使う」事です。PHPですとPDOを使うと可能ですね。…ただ、時々「PDOが使えない」環境があるので。その場合やむを得ず「細心の注意を払って」SQLを組み立てて下さい。
上述はSQL文を直接プログラムに埋め込んでいますが。別解としての「SQLファイルを用意する」という手もあります。
その場合
- SQLになにがしか、番号なりIDなり名前なりを割り振る
- その名前がアクセスされたら該当するSQLを探し出して実行する
という流れになります。
この辺はやはり賛否両論ありますので、その辺を踏まえた上で考えていただけると。
筆者的には「listをとるSQLに関してはあり」だと思っていますが、一方で「全てをSQLファイルに切り出す」と、後々の「テーブルへのフィールド追加に伴う修正」とかが結構広範囲になってしまうので、比較的好まない傾向にある、って感じですかね。
そこの現場さんの流儀、状況、要求内容にもよるので、一概にはなんとも言えないのですが。
総括しますと、オブジェクト指向プログラミングでRDBを扱う時は、大まか「DBハンドル」と「SQL」とにわかれまして、前者は、比較的きれいにオブジェクト化することが出来る一方で、後者は、特に「SQLをある程度しっかりがっつりつかったもの」に対して「未だ議論冷めやらず」といった、大変にhotな状況のままになっています。
これを「全部混ぜてしまう」と「オブジェクト指向でRDBを扱うのは難しい」となってしまうので、とりあえずDBハンドルくらいはきれいに扱った上で、SQLの、特に「厄介なところ」について、何をどうしたいのか意識を集中していきたいところです。
次回は、最後のお題「認証処理の後出し」をやっていきたいと思います。
これもまたなかなかに厄介なところですが、同じくらい、大切なところです。
- 1
- 2
その他の記事も見る
- 第1回 PHPでオブジェクト指向実践1
- 第2回 PHPでオブジェクト指向実践2
- 第3回 configを取り出してみよう
- 第4回 処理するエリアを切り分けてみよう~理論編~
- 第5回 処理するエリアを切り分けてみよう~実装編~
- 第6回 読み書き削除の実装例
- 第7回 保存先の変更
- 第8回 保存先の変更 その2
- 第9回 保存先の変更 その3
- 第10回 会員認証
- 第11回 会員認証
- 第12回 会員認証2
- 第13回 オブジェクトの切り方1
- 第14回 オブジェクトの切り方2
- >>「がる先生のOOP講座」一覧ページに戻る
- がる先生
本名:古庄 道明
株式会社 格子組 代表取締役:
http://www.grid-works-guild.net
M-Frネット: http://www.m-fr.net/
現役のエンジニア。コンサルティングからシステム設計、ネットワークにセキュリティと、守備範囲は比較的多岐に渡る。「技術の基本は、その技術がない時の"困ってる"が根っこ」をモットーに、いい加減いい歳なのをうまく逆手にとって、古い話から現代へ歴史をたどるように教えるのが持ち味。





ページのトップへ


一つの目安として、ECサイトの購入情報など絶対に消えてはいけないものはDBに、カートなどの一時的に使用する情報や、ユーザに任意のタイミングで消去されても構わないものはセッションにと使い分けるといいでしょう。