続いて、updateStock.phpのソースコードをのぞいてみましょう。
1 <?php |
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参照)。
MySQLのデフォルトでは、型違いのデータを挿入した場合でもエラーにはなりません。例えば、sample_db2のitemテーブルで次のようなSQLクエリーを実行します。
mysql> INSERT INTO item VALUES ('100',"商品名","商品詳細","価格",12); |
priceカラムはDECIMAL型のため、文字列の挿入はできずエラーになることが予想されます。ところが、調べてみると次のように挿入が成功していることが確認できます。
mysql> SELECT * FROM item WHERE id = '100'; |
priceカラムは0になっていますが、エラーにはなっていません。先ほどのSQLクエリー実行後のメッセージを再度確認すると「1 warning」と表示されています。それでは警告内容を表示させてみましょう。
mysql> SHOW WARNINGS; |
DECIMAL型に対して異なるデータ型が挿入されたことが警告されています。このように、エラーに出ない警告は「SHOW WARNINGS」クエリーで別途拾う必要があります。こうした“型違い”をエラーとして扱いたい場合は、MySQLサーバ側でストリクトモードを「TRADITIONAL」などに変更します。そのほかのモードについては、MySQL ABの「MySQL 5.0 リファレンスマニュアル」を参考にしてください。
mysql> set sql_mode="TRADITIONAL"; |
MySQL AB「MySQL 5.0 リファレンスマニュアル」
http://dev.mysql.com/doc/refman/5.0/en/precision-math-expressions.html
動作確認は、ブラウザで行います。ブラウザで「http://サーバ/sample4/displayStock.php」にアクセスし、在庫一覧が表示されることを確認します。
サンプルでは1件だけ商品が登録されています。在庫一覧画面の確認ができたところで、適当な商品の情報を入力し、UPDATEやINSERTボタンをクリックし処理を確認してみましょう。
今回は、簡易在庫管理システムを通してDTO・DAOパターンのメリットを確認できました。次回は、これまで作成した在庫管理システムとオンラインストアを統合させてみます。 (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.