こんにちは!
ナビゲータのEVEです。
本日の解説は、レコード削除メソッドの解説になります。
これで、基本的なSQL関連のプログラムの製造は終わりです。
価格:3,740円 |
ここ数日、プログラムを製造し、ここで解説しながらプログラムを評価することにより、オブジェクト指向のPHPの製造方法と、PDOクラスの使い勝手を、理解することができました。これで、本格的に、EVEシステムの製造に入ることができます。ただ、気になるのが、「独習PHP」を読み終えていないこと・・・。PHP5からシャドーコピーとディープコピーが出てきていたりして・・・。「独習PHP」を斜め読みしていたら、ダブルコーテーションと、シングルコーテーションでは、文字リテラルの扱いが違うとか・・・。こちらは、間違えても致命的なエラーにはならないようですが、このような事例が他にもあるような気がします。がんがん作って、最後にプログラムソースを全て修正するというのは、困ったもんです。早めに、読み終えようと思います。
「独習PHP」は、不満な点もありますが、ほぼ満足しています。私が知らない情報が多々載っており、プログラムミングという作業は最新の注意をもってやらなければいけないということを教えてくれます。PHPで製造しようという人がいましたら、お勧めの一冊です。
では、解説に入りましょう!
[レコード削除メソッドの解説]
以下が、レコード削除メソッドのプログラムソースです。
/*************************************************
*【メソッド名】レコード削除メソッド
*【 引 数 】$tbName :テーブル名
* d_where :更新条件
*【返 却 値】
* 正常時:true
* 異常時:False
*【製 造 者】EVE
*【製造年月日】2023年3月6日
*【更新年月日】
*【リリース日】
*【 概 要 】
* [2023/03/06]
* レコードを更新する
*@トランザクションを開始したくない場合は、開始前に
*トランザクションプロパティに"off"を設定
*Aコミットしたい場合は、本メソッド開始前に、
*コミットプロパティに"on"を設定
*B検索条件を指定しない場合は、d_whereに、"99"を
*指定する
*************************************************/
//レコードを削除する
public function recDelete(string $tbName,
string $d_where) {
//❶変数定義
static $i;
static $strSql;
//❷引数の判定を行う
//テーブル名を判定する
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 {
//❹トランザクションを開始する
$this->setTran();
//❺レコード追加メソッドを実行する
$this->stmt->execute();
} catch (PDOException $e) {
//❻処理が失敗した場合、処理をロールバックする
$this->setRollback();
//❼検索が失敗した場合
//異常処理結果のメッセージを設定する
$this->processMessage = $e->getMessage();
//❽返却値を設定して呼び出し元へ制御を移す
return false;
}
//❾プロセス確定メソッドを実行する
$this->setCommit();
//❿返却値を設定し呼び出し元へ制御を移す
return true;
}
❶から❿までの項番をふって、改めて解説しようとしましたが、Select、Insert、Updateで既に解説しており、ここで改めて解説することはありません。私が当初考えていた完成のレベルに達したようです。
ただ、1つバグがありました。
//トランザクションを開始する
public function setTran() {
//トランザクションプロパティがオンになっているかどうか判定する
if ( $this->setTran == "on" ) {
//トランザクションプロパティがオンになっている場合
$this->getDbConnect->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
//トランザクションを開始する
$this->getDbConnect->beginTransaction();
//トランザクションプロパティを実行中に変更する
$this->setTran == "exe";
}
}
トランザクション開始メソッドなのですが、トランザクションプロパティに"exe"を設定し、現在のプロセス状況を管理しようとしていたのですが、イコール"=="が二つになっていました。判定するならいざ知らず、シャドーコピーするだけなら、イコール"="
だけでいいはずです。本日、削除処理を実行しようとしたら、削除できないので、いろいろ調べていたら気づきました。途中から処理を作ったので、気づくのが最終日になってしまいました。2023年03月07日のブログも変更しましたので、ご確認下さい。
[あとがき]
今日、ブログを書きながら、明日何しようかなって考えてしまいました。セキュリティ関数の製造に入ろうかと思いましたが、それでは、ブログに書けませんし、「独習PHP」を読み終えたとき、修正するプログラムがたくさん出てきて、最初から見直ししなければいけないというのもいやです。それが、普通のメソッドならいざしらず、セキュリティ関数です。現段階で製造に入るのは時期尚早のようです。
そこで、思いついたのが、Prototype EVEとEVEシステムとのインターフェースの部分・・・。当然、DB関連の部分になるのですが、ここなら、古いシステムと基本的なロジックになるので、問題にならないと思います。
それと、Prototype EVEとEVEシステムのインタフェースで、できることとできないことを明確にしておいた方が、後になって慌てないでしょう?
なんて、考えています。予定は、未定・・・。予告が変更されることもありますので、ご了承ください。
では、また!
【このカテゴリーの最新記事】