検索
連載

DTO・DAOパターンのメリットを体験しよう今から始める MySQL入門(7)(2/2 ページ)

Share
Tweet
LINE
Hatena
前のページへ |       

簡易在庫管理システムの作成(2)

簡易在庫システム − updateStock.php

 続いて、updateStock.phpのソースコードをのぞいてみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 3〜32行目がメインの処理です。35〜67行目でdisplay()関数を定義しています。display()で引数の文字列をブラウザに表示します。更新/削除/挿入どれも結果の表示は似ているため、メッセージだけ交換できるものを用意することで、表示処理を共通化します。

 それでは、メインの処理を詳しく見ていきましょう。

3、4行目

 Item.php・ItemDao.phpファイルをrequire_onceで読み込みます。

6、7行目

 Itemクラス、ItemDaoクラスを生成(インスタンス化)します。

10〜14行目

 フォームの値を取り出します、その際、SQLクエリーで特別な意味を持つ文字をaddslashes()でエスケープ処理し、悪意のあるSQLクエリーが作成されないようにします(連載第5回「MySQLの基礎を学ぼう [サンプル開発編]」)。

16〜32行目

 buttonの値($_POST["button"])で処理を分岐し実行します。

17〜20行目

 更新処理を行います。

21〜24行目

 挿入処理を行います。

25〜28行目

 削除処理を行います。

 それぞれの処理がItemDaoクラスを使用することで、簡素化されていることが分かります(18、22、26行目)。後は、処理が終了したことをdisplay()関数で表示します。なお、MySQLサーバに接続できない場合のみエラー処理が用意されています。そのほかのエラーについては、特に設けられていません(コラム2参照)

コラム2 MySQLのエラーとワーニング

MySQLのデフォルトでは、型違いのデータを挿入した場合でもエラーにはなりません。例えば、sample_db2のitemテーブルで次のようなSQLクエリーを実行します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

priceカラムはDECIMAL型のため、文字列の挿入はできずエラーになることが予想されます。ところが、調べてみると次のように挿入が成功していることが確認できます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

priceカラムは0になっていますが、エラーにはなっていません。先ほどのSQLクエリー実行後のメッセージを再度確認すると「1 warning」と表示されています。それでは警告内容を表示させてみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

DECIMAL型に対して異なるデータ型が挿入されたことが警告されています。このように、エラーに出ない警告は「SHOW WARNINGS」クエリーで別途拾う必要があります。こうした“型違い”をエラーとして扱いたい場合は、MySQLサーバ側でストリクトモードを「TRADITIONAL」などに変更します。そのほかのモードについては、MySQL ABの「MySQL 5.0 リファレンスマニュアル」を参考にしてください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

関連リンク:

MySQL AB「MySQL 5.0 リファレンスマニュアル」
http://dev.mysql.com/doc/refman/5.0/en/precision-math-expressions.html


動作確認

 動作確認は、ブラウザで行います。ブラウザで「http://サーバ/sample4/displayStock.php」にアクセスし、在庫一覧が表示されることを確認します。

画面1 displayStock.phpの表示
画面1 displayStock.phpの表示

 サンプルでは1件だけ商品が登録されています。在庫一覧画面の確認ができたところで、適当な商品の情報を入力し、UPDATEやINSERTボタンをクリックし処理を確認してみましょう。

画面2 updateStock.phpの表示
画面2 updateStock.phpの表示

 今回は、簡易在庫管理システムを通してDTO・DAOパターンのメリットを確認できました。次回は、これまで作成した在庫管理システムとオンラインストアを統合させてみます。 (次回に続く)


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る