こんにちは!
ナビゲータのEVEです。
本日、継承で作らなければならない部分を一通り作ってみました。簡単な試験では、Update、Deleteの処理は正常に動いているようです。本日の製造は、これぐらいにして、明日に、Transaction,、Rollback、Commit処理が、Insert、Update、Delete処理を正しく制御できるか確認したいと思います。
[New Prototype EVE]
以下が本日製造したプログラムです。昨日のブログで説明していませんでしたが、クラスの継承には、extendsしなくてはいけません。同部分については、赤く表示してるのでご確認ください。extendsの最後のsを忘れがちですが、気を付けてください。私だけですかね?
なお、一度修正したロジックの一部を削除したプログラムですので、解説は不要でいいですよね?
<?php
require_once "EVESystemDB,php";//DB関連クラス
/*************************************************
*【クラス名 】DB関連クラス(New Prototype EVE対応)
*【製 造 者】EVE
*【製造年月日】2023年3月17日
*【更新年月日】2
*【リリース日】
*【バージョン】
*【 概 要 】
* データベースに関する基本的な機能を提供する
*************************************************/
class getInfDB extends getDB {
/*************************************************
*【メソッド名】レコード更新メソッド(New Prototype EVE)
*【 引 数 】$tbName :テーブル名
* u_Clum :カラム名(配列)
* u_Data :データ(配列)
* u_where :更新条件("99"の場合は、"")
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年3月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* レコードを更新する
*************************************************/
//レコードを更新する
public function recUpdate(string $tbName,//テーブル名
array $u_Clum, //追加用項目
array $u_Data, //追加用項目
string $u_where){ //更新条件
//変数定義
static $i;
static $u_array = array();
static $strSql;
static $rtn;
//引数の判定を行う
//テーブル名を判定する
if ( $tbName == "" ) {
//異常の場合メッセージを設定し呼び出し元へ制御を移す
$this->processMessage = "テーブル名が設定されていません";
//呼び出し元へ制御を移す
return false;
}
//引数(配列)の判定を行う
if ( count( $u_Clum ) != count($u_Data) ) {
//引数の指定に誤りがある場合
$this->processMessage = "引数の指定に誤りがあります";
//呼び出し元へ制御を移す
return false;
}
//引数条件が設定されているかどうか判定する
if ( $u_where == "" ) {
//異常の場合メッセージを設定し呼び出し元へ制御を移す
$this->processMessage = "更新条件が設定されていません。";
//呼び出し元へ制御を移す
return false;
}
//SQL文を編集する
$u_array[] = "update ";
$u_array[] = $tbName;
$u_array[] = " set ";
//カラム配列終了まで以下の処理を実行する
for ( $i = 0; $i < count( $u_Clum ); $i++ ) {
//カラムを編集する
$u_array[] = $u_Clum[$i];
$u_array[] = " = ?";
//最終処理かどうか判定する
if ( count( $u_Clum ) == $i + 1 ) {
//最終処理の場合
//forを終了する
break;
} else {
//最終処理でない場合
$u_array[] = ",";
}
}
//検索条件の判定を行う
if ( $u_where != "99" ) {
//データの編集を開始する
$u_array[] = " where ";
$u_array[] = $u_where;
}
//SQL文を編集する
$strSql = implode( "",$u_array );
//プリシアードステートメント設定をする
$this->stmt = $this->getDbConnect->prepare($strSql);
//バインド変数終了まで以下の処理を実行する
for ( $i = 0; $i < count($u_Data); $i++ ) {
//バインド変数へデータを設定する
$this->stmt->bindParam($i+1,$u_Data[$i]);
}
//SQL文実行処理
try {
//レコード更新メソッドを実行する
$rtn = $this->stmt->execute();
} catch (PDOException $e) {
//更新処理が失敗した場合
//異常処理結果のメッセージを設定する
$this->processMessage = $e->getMessage();
//返却値を設定して呼び出し元へ制御を移す
return false;
}
//取得したレコード件数を設定する
if ( !($rtn = $this->recCount()) ) {
//返却値でエラーが発生していた場合
//処理結果を設定し呼び出し元へ制御を移す
return $this->processMessage;
}
//返却値を設定し呼び出し元へ制御を移す
return true;
}
/*************************************************
*【メソッド名】レコード削除メソッド(New Prototype EVE)
*【 引 数 】$tbName :テーブル名
* d_where :更新条件
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年3月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* [2023/03/06]
* レコードを更新する
*************************************************/
//レコードを削除する
public function recDelete(string $tbName, //テーブル名
string $d_where) { //更新条件
//変数定義
static $i;
static $strSql;
static $rtn;
//引数の判定を行う
//テーブル名を判定する
if ( $tbName == "" ) {
//異常の場合メッセージを設定し呼び出し元へ制御を移す
$this->processMessage = "テーブル名が設定されていません";
//呼び出し元へ制御を移す
return false;
}
//引数条件が設定されているかどうか判定する
if ( $d_where == "" ) {
//異常の場合メッセージを設定し呼び出し元へ制御を移す
$this->processMessage = "削除条件が設定されていません。";
//呼び出し元へ制御を移す
return false;
}
//SQL文を編集する
$d_array[] = "delete from ";
$d_array[] = $tbName;
$d_array[] = " where ";
$d_array[] = $d_where;
//SQL文を編集する
$strSql = implode( "",$d_array );
//プリシェアードステートメント設定する
$this->stmt = $this->getDbConnect->prepare($strSql);
//SQL文実行処理
try {
//レコード追加メソッドを実行する
$rtn = $this->stmt->execute();
} catch (PDOException $e) {
//削除処理が失敗した場合
//異常処理結果のメッセージを設定する
$this->processMessage = $e->getMessage();
//返却値を設定して呼び出し元へ制御を移す
return false;
}
//取得したレコード件数を設定する
if ( !($rtn = $this->recCount()) ) {
//返却値でエラーが発生していた場合
//処理結果を設定し呼び出し元へ制御を移す
return $this->processMessage;
}
//返却値を設定し呼び出し元へ制御を移す
return true;
}
/*************************************************
*【メソッド名】トランザクション開始メソッド(New Prototype EVE)
*【 引 数 】なし
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年3月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* トランザクションを開始する
*************************************************/
//トランザクションを開始する
public function setTran() {
//トランザクション情報を設定する
$this->getDbConnect->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
//トランザクションを開始する
$this->getDbConnect->beginTransaction();
}
/*************************************************
*【メソッド名】コミットメソッド(New Prototype EVE)
*【 引 数 】なし
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年3月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 処理を確定する
*************************************************/
//データベースを確定する
public function setCommit() {
//確定処理を実行する
$this->getDbConnect->commit();
}
/*************************************************
*【メソッド名】ロールバックメソッド(New Prototype EVE)
*【 引 数 】なし
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年3月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* トランザクションを発生した処理をロールバックする
*************************************************/
//データベースをロールバックする
public function setRollback() {
//処理をロールバックする
$this->getDbConnect->rollBack();
}
}
?>
[あとがき]
これで、Prototype EVEのデータベース関連関数の全てが修正できます。明後日以降、一気に修正しようかなって考えています。ただ、ですね・・・。個人的に、便利なプログラムをたくさん作った関係で、今まで作ったところは全体の1/3になります。作るだけなら、数日でできると思いますが、デバックは、ちょっと、時間が必要だと思われます。まっ、全体を作りながらデバックするっていう方法もありますが、まだ、どんな変更点があるのか分からない場合、修正している途中で、何がなんだかわからなくなる可能性があります。どうしましょうか?
データベース関連の修正ができれば、Prototype EVEのログインシステムが利用できるようになるので、そこから、Prototype EVEとPHP8の不整合の確認ができる予定です。
という状況で、今月末ぐらいで、今後の見通しがなんとなく立ちそうな予感がしてきました。
今までは、システムの基本的な部分で、誰が作っても同じようなロジックになる所なので、公開してきましたが、以降は、取捨選択して、お見せできるものだけ、公開していく予定です。
では、また!
【このカテゴリーの最新記事】