ADOとMySQL関数の比較

本記事のポイント

MVCモデルはインターフェイスであるViewerが要求を受け付けて、Controllerが内部処理して、Modelがデータベースに格納する、という3層構造になっているので、テーマ変更と追加処理とデータ構造変更の3つを、限りなくお互いの影響を排除しながら、分業化して行なうことができます。

開発プラットフォームとしてのCMS

WordPressなどのCMSは豊富なテンプレートやプラグインがあるので企業ホームページやポータルサイトなどのデザイン重視のWebサイト作成向きであり、僕のようにデザインセンスに自信のない人間にとっては大幅な開発工数短縮が可能になります。

またCMSなので投稿や固定ページの追加・修正・削除が容易であり、ブログ機能であるカテゴリ化、タグ付け、アーカイブなどによるデータ整理が楽であり、保守性に秀でています。

一方、頻繁にDB処理を行なうデータ処理中心のWEBサイト開発の場合は、CMS独自のテーブル構造やファイル構成の制約を受けるデメリットが強く働き、そもそもCMSの強みが発揮できないため、PHPでライブラリを使いながらスクラッチ開発したり、フレームワークを使ってMVCモデル(処理Model-出力Viewer-入力Controller)開発することになります。

多くのマスタデータを新設する必要がある業務系サイトではCMSの出る幕は少ないでしょう。

MVCモデルはインターフェイスであるViewerが要求を受け付けて、Controllerが内部処理して、Modelがデータベースに格納する、という3層構造になっているので、テーマ変更と追加処理とデータ構造変更の3つを、限りなくお互いの影響を排除しながら、分業化して行なうことができます。

CMSが開発プラットフォームとして利用されるとすれば、今後も参照系システム中心になると思われます。

MySQL関数

VBのADOでレコードセットから値を取り出す場合と異なる点は、mysql_queryで返された結果(2次元配列)にアクセスするためには、結果リソースをレコード(行)単位で mysql_fetch_array関数にてフィールド数分の配列として取得する必要があること。

つまりADOの場合Query実行結果を2次元配列であるrs(レコードセット)に格納し、レコードセットからフィールド名を指定することで値を取得し、レコードセットに対して直接MoveNextで行を進めていくが、MySQLの場合mysql_query関数によるQuery実行結果を2次元配列であるret(レコードセット)に格納し、レコード単位にmysql_fetch_array関数でで配列に格納した上でフィールドの値を取得する。

フォームからデータを入力

DBに接続

SET NAMESが使えない場合はINSERT文で日本語をDBに挿入する場合、以下の文字化け防止処理をする。

入力データを元にQueryを実行

レコードセットの行数と列数を取得(値の取得のためのループの最大値として使用)

Queryの結果を表示

$rowをmysql_fetch_arrayの戻り値とした場合、$row[0]にSEIの値, $row[1]にMEIの値, $row[2]にEMAILの値が入り、もう一度 戻り値を$rowとしてmysql_fetch_arrayを実行すると、その次の行が同じ変数に格納される。

ちなみに似たようなMysql関数にmysql_fetch_assocというのがあるんですが、こちらは添え字配列専門です。

以下のようにwhileとforeachを使えばよりシンプルになります。mysql_fetch_arrayは繰り返し実行するだけで次のレコードに進む(rs.MoveNextみたいに)してくれるところがポイントです。

mysql_fetch_arrayがFalesを返すまで(取得すべき行が存在しない)ループし、その中でforeachにより配列のキーと値(列の値)を取り出す。foreachはwhile文やfor文などと異なり繰り返しが終了される条件式は存在せず、配列の要素の数だけ繰り返して終了する。

DBから切断

ライブラリを使用する

PEARのライブラリPEAR MDB2でDB接続
Smartyでコードビハインド(ロジックがphpファイル、デザインがtplファイル)

ライブラリの読み込み

フォームからのデータを取得

DBに接続

入力されたデータを元にQueryを実行

SmartyのテンプレートにQuery結果を表示

テンプレートファイル