こんにちは!
ナビゲータのEVEです。
本日は、昨日製造した、プログラムの解説をします。
[Prototype EVE、EVEシステムインターフェース]
昨日、件数カウントの部分をメソッドに出すかもしれないと話していましたが、出した方がすっきりしますし、Selectだけでなく、DML(Data Manipulation Language)実行時にも件数が取得できるらしいので、DMLへも横並びでロジックを追加しました。DMLの部分は、実行結果の返却値でないとエラーになるかもしれないと思ったのですが、実行するとエラーにはなりませんでした。後日デバックして問題なければ、このロジックで行きたいと思います。
/*************************************************
*【メソッド名】DB検索関数(新)
*【 引 数 】
* p_sql :Sql文
* p_count:想定取得レコード件数
*【返 却 値】
* 正常時:検索結果
* 異常時:異常メッセージ
*【製 造 者】EVE
*【製造年月日】2005年2月20日
*【更新年月日】2023年3月16日
*【リリース日】
*【バージョン】
*【 概 要 】
*************************************************/
function gb_dbselect($p_sql,$p_check ) {
//❶変数定義
$rtn = ""; //返却値
$ans = ""; //Fetch結果
$Bind = array(); //バインド変数配列
$db; //データベース検索格納オブジェクト
$count = 0; //件数カウント
$array = array();//編集結果格納オブジェクト
$i = 0; //編集用インデックス
//❷インスタンス作成
$db = new getDB(db,host,'utf8',user,pass);
//❸Fetchメソッドを実行する
$ans = $db->selectFetch(1,$p_sql,$Bind);
//❹返却値の判定を行う
if ( $ans == false ) {
//Fetchメソッドでエラーが発生した場合、
//返却値を設定し呼び出し元へ制御を移す
return db->$processMessage;
}
//❺件数をカウントする
$count = $db->Count;
//❻チェックフラグが"on"の場合、件数チェックを行う。
if (( $count == $p_check ) || ( $p_check == NULL )) {
} else {
//予想外の結果だった場合返却値を設定し呼び出し元へ制御を移す
return "Count Error";
}
//❼件数カウントの結果0件の場合呼び出し元へ制御を戻す
if ( $count == 0 ) {
//取得結果が0件だった場合、件数カウントをセットし呼び出し元へ制御を移す
return $count;
} else {
//オブジェクトの編集
//❽取得データ終了まで以下の処理を実行する
foreach ($ans as $row0) {
//❾カラム終了まで以下の処理を実行する
foreach ($row0 as $row1 => $value) {
//❿返却値オブジェクトへ毛策結果をセットする
$array[$i][$row1] = $value;
}
//⓫行数カウンタに1加算する
$i++;
}
}
//⓬検索結果を返却値に設定し呼び出し元へ制御を移す
return $array;
}
❶この関数で利用するすべての変数を定義しています。Prototype EVEではここら辺の基準が明確ではありませんでしたが、EVEシステムでは、すべて定義することを規約としました。
❷データベースへ接続するためのメソッドを作成しています。なお、ここで、db、user、passとリテラルで記述していますが、ここは、別ファイル内において(require_onceで取り込み)defineでそれぞれの値を定義しているため、このような記述になっています。
❸Fetchメソッドで実行しています。
❹Fetchメソッドでエラーが発生していないか判定しています。発生している場合は、呼び出し先で設定したメッセージを取得し呼び出し元へ制御を移しています。
❺昨日のプログラムでは、長々となりましたが、1行にまとめることができました。実行自体は、Fetchメソッドから呼び出されている、データベース検索メソッド内で取得しています。ここについては、明日解説をします。
❻取得件数が予め分かっている場合、チェックフラグとして、件数をこのフラグに設定しています。そのチェックフラグと取得件数を比較し、もし違っていたら、エラーとしています。このロジックは、テストをすべてのロジックでできなかったため、実行した時の結果で、バグを見つけることができるように作ったロジックです。
❼取得した件数を判定しています。取得した件数が0件なら、返却値を編集するのは手間になるので、返却値を設定し呼び出し元へ制御を移しています。
❽では、検索結果からのレコードを取得し、❾でレコードからカラムを取得しています。❿では、レコードを添え字にした、連想配列の二次元テーブルへ取得結果を設定し、返却値データを編集しています。
⓫では、格納レコードのポインタをずらすために、カウンタに1加算しています。
⓬編集結果を設定し、呼び出し元へ制御を移しています。
[あとがき]
明日、件数カウントの部分の解説をします。簡単なプログラムなので、解説自体は、お手間をとらせないと思います。
但し、今後開発するうえで、問題が1つ露見しました。同部分、実はまた、プログラマとして初体験の技術を使います。簡単ならいいのですが・・・。明日、件数カウントのメソッドの後にご説明します。
では、また!!!
【このカテゴリーの最新記事】