検索
連載

「オンラインストア」完成へ向けて各ファイルを再構築今から始める MySQL入門(9)(2/4 ページ)

Share
Tweet
LINE
Hatena

「簡易在庫管理システム」の修正

 「簡易在庫管理システム」では、すでに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.

ページトップに戻る