こんにちは!
ナビゲータのEVEです。
だんだんと、プログラムを作る速度が早くなってきました。慣れてきたんですね?以前のレベルではないのですが、3週間もすれば、以前同様に開発できそうです。って妄想を抱いています(笑)。
本日製造したのは、レコードを追加するプログラムなのですが、デバックが終わっていないので、昨日製造した、検索するSQL文に、バインド変数を設定するプログラムを解説していきます。
[SQL文に変数を設定する]
以下が、2023年3月1日に製造した検索プログラムに、変数を定義、バインド変数を設定できるようにしたプログラムです。紫の部分が前回から追加したロジックです。
/*************************************************
*【メソッド名】データベース検索メソッド
*【 引 数 】strSql :Sql文
* Bind :バインド変数
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年3月1日
*【更新年月日】2023年3月2日
*【 備 考 】
* 受け取った文字列でデータベースを検索する
*************************************************/
//データベースを検索する
public function selectDb(string $strSql, //SQL文
array $Bind) { //バインド変数
//SQL文実行処理
try {
//プリシェアードステートメント設定する
$this->stmt = $this->getDbConnect->prepare($strSql);
//バインド変数終了まで以下の処理を実行する
for ( $i = 0; $i < count($Bind); $i++ ) {
//変数をSQL文へ設定する
$this->stmt->bindParam($i+1,$Bind[$i]);
}
//検索を実行する
$this->stmt->execute();
//処理結果を設定する
$this->processResult = true;
} catch (PDOException $e) {
//検索が失敗した場合
//処理結果を設定する
$this->processResult = false;
//異常処理結果のメッセージを設定する
$this->processMessage = $e->getMessage();
}
}
呼び出し元プログラムでは、以下のような感じでSQL文を記述します。
//SQL文を編集する
$sql = "select * from test_table where id = ? and name = ?";
//バインド変数を設定する
$bind[] = 1;
$bind[] = tarou;
//検索を実行する
$pdo->selectDb($sql,$bind)
バインド変数は、?の部分に先頭から順番に設定していくようです。配列に変数を入れる順番は、?の順番に併せて設定してください。
[実は大変でした]
できたプログラムを見ると、修正が少ないので簡単なように見えますが、実は、大変でした。
最初、以上のようなプログラムで実行したいと思い、プログラミングを始めたのですが、なかなか動きません。理由は、プリシアードステートメントにバインド変数を設定する方法は複数あり、以上のようなプログラミングができない方法を選択していたからです。それは、bindValueメソッドと、bindParamメソッド・・・・。「独習PHP」には、それしかやり方が、載っていなかったので・・・。「独習PHP」片手に、できない、できないと苦闘しながら、最終的には他のやり方を探しました。このような処理は、各プログラムに書くのではなく、クラスのメソッドとして実行するのが私の理想です。そして、インターネットで検索して以上の方法を見つけました。このプログラミングも数時間を要しました。
[あとがき]
今日、PHPをプログラミングをしていて気づいた点は、メソッド内で、staticを利用し定義するのですが、型は定義できないようです。型を定義するとエラーになるので、多分できないのだと思います。よく考えたら、クラス変数にも型は定義していませんね・・・。クラス変数に型を定義できるのでしょうか?試してみたら、エラーにはなりませんでした。Javaなら当然定義するのですが、PHPはどうなのでしょうね???
つい最近、株探を見ていたら、ノーコード開発の記事を見つけました。以前、ブログで、SHIFT(3697)という会社を紹介し、プログラムを必要としないシステムが出てくるといった話をしましたが、SHIFT(3697)だけでなく、現在いろいろな企業がしのぎを削っているようです。ただ、このPHPの型を定義すると言った所などは、それとは逆行しているような気がするのですが???あなたは、どう感じますか?
では、また!!!
■プログラマのすすめ 〜プログラマの環境〜 [システム開発研究室]
https://fanblogs.jp/bahamuteve/archive/194/0
【このカテゴリーの最新記事】