「簡易在庫管理システム」の修正
「簡易在庫管理システム」では、すでにDAOパターンを適用しているため、修正される個所は限られます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
まずItemDao.phpを、基底クラスBaseDao.phpを継承するようにします(2行目)。BaseDao.phpを継承することでMySQL接続(connect())/切断手順(disconnect())はBaseDao.phpのものが使用できるようになります。コンストラクタ(__construct)/デストラクタ(__destruct)は、先ほどの説明のようにサブクラスに継承されないため、意図的に親クラスのものを呼び出すよう修正します(4〜12行目)。
次に、前回採用したデータベースの外部キー制約設定に伴う修正を行います。外部キー制約エラーが発生した場合とそれ以外の場合とを区別し、画面にメッセージを表示するようにします。
updateItem()/insertItem()/deleteItem()/deleteItemById()の各メソッドでは、終了結果やエラー内容をreturn文を使って戻すようにします。deleteItemById()ではエラーの際にMySQLサーバから出力されるエラーコードを受け取り(114行目)、1451番(注)であれば外部キー制約エラーの旨を返すようにします(115行目)。
なおsample5では、RDBMSに依存する操作をDAOに集約するため、SQLクエリ中の特殊文字のエスケープは、「mysqli->real_escape_string()」を使ってDAO内で行うよう修正しています(56、63、108、125〜129行目)。
注:第8回の「外部キー制約の利用」中の「DELETE FROM item WHERE id = '3';」実行の際のエラーを参照。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
displayStock.phpではBaseDao.phpを読み込むよう、記述を1行加えます(9行目)。HTML出力を行う際はhtmlspecialchars()を使用し、特殊文字のエスケープを行います。SQLクエリに対する特殊文字の処理は、各DAOクラスで行うようにします。
続いて、updateStock.phpにも修正を加えます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
まず4行目のようにBaseDao.phpを読み込みます。ボタンラベルで条件分岐をさせる17行目以降で、単にItemDaoクラスのメソッドを呼び出すだけではなく、メッセージを受け取り、そのメッセージを後半で定義しているdisplay()関数の引数として渡すようにします。
その際、HTML出力を行うときにはhtmlspecialchars()を使用し、特殊文字のエスケープを行います。SQLクエリに対する特殊文字の処理は、ItemDaoクラスで行うようにします。
Copyright © ITmedia, Inc. All Rights Reserved.