第12章 PHPとデータベースの連携

12.7 データベースの操作を関数を使って共通化してみよう

これまでの学習でデータベースへの様々な操作を行ってきましたが、何度も同じ処理を記述していることに気がついたのではないでしょうか。このような場合、同じ処理はまとめて「ユーザー定義関数」にしておけば、何度も同じプログラムを記述せずに済み、さらには再利用可能になるので簡単にデータベースへの操作が行えるようになります。

12.7.1 データベース操作の共通関数を作成しよう

これまで何回も記述していた以下の処理部分を共通化し、データベースを操作できる関数を作成していきます。

① MySQL接続情報の設定
② MySQLサーバへの接続
③ データベースの選択
④ SQL文の発行
⑤ MySQLサーバの切断

データベースの操作を関数に定義したプログラム

データベースの操作を行う関数を定義したPHPファイルを作成します。

ソース・フォルダー: myproj_basic/ch12
パッケージ: dbprocess.php
アクセスURL:他のPHPファイルに取り込んで利用するため実行は行わない。

dbprocess.php

■executeQuery関数:引数のSQL文をデータベースに発行し、その結果を戻り値として返す。
関数名: executeQuery(“SQL文”)
引数: $sql データベースに発行したいSQL文(SELECT、INSERT、UPDATE、DELETEなど)
戻り値: 成功 検索の場合「結果セット」、更新系の場合「true」/ 失敗 失敗した所で強制終了
説明:

MySQLサーバに必要な情報を変数に用意しておき、その情報を元にMySQLサーバへ接続します。
さらにデータベースの選択を行い、引数で受け取ったSQL文をデータベースに発行します。最後に
MySQLサーバへの切断を行い、SQL文の発行結果を呼び出しもとへ返します。

解説

共通関数が定義されているファイルを別のファイルで利用するには、7章で学習した「include」か「require」を利用すれば行えます。
ファイルの取り込み方を忘れてしまった場合、7章を参照してから行ってください。

共通関数でデータベース操作を行いデータの更新を安全に行うプログラム

別の画面から商品IDを入力し、その情報を元にデータベースのデータの更新を行います。さらに、データベースに更新を行う前に、更新対象のデータがあるのかを確認する処理を追加します。

ソース・フォルダー: myproj_basic/ch12
パッケージ: updateForm2.php
アクセスURL:http://localhost/myproj_basic/ch12/updateForm2.php

updateForm2.php

ソース・フォルダー: myproj_basic/ch12
パッケージ: updateQuery2.php
アクセスURL:updateForm2.phpからの画面遷移でアクセスされる

updateQuery2.php

実行結果

変更データの確認

「updateQuery2.php」の画面に12.5.2で作成した「selectAll.php」へのリンクを用意して確認します。

解説

このプログラムは12.6.2で作成した内容を、以下のように変更したものになります。
まずはデータベース操作に関する処理を前項で作成した共通関数「executeQuery関数」で行います。さらに、更新対象のデータがデータベースに存在するのかも確認します。その結果データがあれば更新処理を行い、なければエラーメッセージを画面に表示します。

5行目では前項で作成した共通関数が定義されている、「dbprocess.php」ファイルをrequire_onceを使って取り込みます。

8行目は更新データの確認で見つからなかった場合に、メッセージを格納する変数$errMsgを用意しています。

11行目で更新対象のIDが存在するのか調べるため、完全一致のSQL文を設定しています。そして12行目でその設定したSQL文を引数にexecuteQuery関数を使ってSQL文(SELECT文)の発行を行います。

15~25行目はmysqli_num_rows関数を使って更新対象のデータが取得できたのか確認しています。検索に該当すると1件データが取れるのでifブロックの処理を行い、データがない場合はelseブロックの処理を行い変数$errMsgにエラーメッセージを設定します。

更新対象のデータがあればifブロックの処理に進み、17行目は更新対象の更新前データをmysqli_fetch_array関数で取得して変数$dataに受け取っています。
20行目では入力データを元に更新用のSQL文を用意し、21行目で再度executeQuery関数を使ってSQL文(UPDATE文)の発行を行います。
取り込んだファイルの関数は何度でも利用できるのもポイントになります。

28行目では更新対象のデータがあるのかを検索した時の、結果セット($result1)を開放しています。検索の結果データがあってもなくても開放は行う必要があります。逆に更新系のSQL文を発行した結果の$result2は行う必要はありません。

37~48行目は更新対象の有無、つまりエラーメッセージが設定されているかで画面に表示する結果を変化させています。
エラーメッセージが空の場合は正しく更新処理が行われていると判断できるため、変更前と変更後のデータを画面に表示します。逆に更新処理が行われていない場合は、エラーメッセージを画面に表示します。

今回のようにデータベースの処理を取り込んで利用していると、何度でもデータベースへの操作が簡単に行えます。また、他のプログラムにも再利用でき、データベースの操作を忘れていてもこのファイルの使い方さえ覚えていれば良いので大変便利です。

NEXT>> 12.8 本章のまとめ