第9回 保存先の変更 その3 - OOP講座

PHP基礎編

がる先生の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
  • がる先生

本名:古庄 道明
株式会社 格子組 代表取締役: http://www.grid-works-guild.net
M-Frネット: http://www.m-fr.net/

現役のエンジニア。コンサルティングからシステム設計、ネットワークにセキュリティと、守備範囲は比較的多岐に渡る。「技術の基本は、その技術がない時の"困ってる"が根っこ」をモットーに、いい加減いい歳なのをうまく逆手にとって、古い話から現代へ歴史をたどるように教えるのが持ち味。

ご意見・感想フォーム

今回の「がる先生のOOP講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:



Pick Up Q&A

Q
セッションがいいのか、それともデータベースがいいのか教えて下さい。
 このエントリーをはてなブックマークに追加 
A
>ボタンをクリックしたら選んだ商品情報を持っておきたいと思っています。 そのくらいのことならセッションもしくはCookie(期限短め:場合によってはブラウザ閉じるまで)でいいんじゃないですかね。 #わ...

>>続きを読む

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

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)