Prototype EVE開発日誌 -バッチ処理編 修正処理- ~プログラム研究室~


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 引き続きPrototype EVEで使用していたバッチ処理を修正しています。いろいろありますね・・・。不整合が、今回PHP5からPHP8へ変更したことにより、噴出しています。

[不整合]
 昨日、今日発見した不整合は以下の通りです。
❶不要な位置にbreakが入っているとエラーになる。例えばif文・・・。
❷HTMLで利用する、コンボボックス内で、SELECTEDを指定しても同行が選択されない。
❸MySQLのNULLを許容している項目に、””でデータの挿入ができなくなった。
 ❶は、単純なミスです。if文にbreak文が入っていて、エラーになりました。PHP5の時はエラーにはなっていません。
 ❷は、サーバーサイトでHTMLで編集し、コンボボックスの当該行にSELECTEDを指定しても、同行が表示されません。一番上の行が表示されています。最初、JavaScriptでオンロードのタイミングで以下のように指定していました。


window.document.FormName.ElementName.options[ComboboxIndex].selected = true;

 その指定で、ComboboxIndex、添え字の指定に誤りを見つけたため、その部分をサーバーサイトで実現しようと、HTMLを編集する方法を採用したのですが、思ったような動作をしません。
 そのため、結局元に戻し、JavaScriptで正しい添え字を設定し、正常の動作にしたという修正をしています。なぜだろう???PHPのバージョンには、関係ないはずなのだが・・・?
 ❸は、PDOの仕様のようです。MySQLでNULLが許容されているなら、そこに何も設定しないのなら、NULLを指定しろというのです。今まで””とNULLは区別なく利用できたのですが、PDOを利用する場合、それを明確に区別し登録しなくてはいけないようです。ちなみに、最初の段階では、PHPからのメッセージに基づき、NULLではなく、イニシャルデータ例えば0を設定していました。しかし、ChatGPTにこの問題を相談したところ、NULLを明示的に指定すればいいことを教わりました。この場合、初期データを設定したいだけだったので、NULLに再修正しています。
 ちなみに、””は文字列で、NULLはデータ型NULLという扱いで全く別の文字コードを使用しています。知っていたんですけれどね・・・・。ちなみに、その違いについて、ChatGPTに聞いてみました。

 プログラムで “”(ダブルクォーテーション内に何も文字がない空の文字列)と NULL は異なるものです。これらは異なるデータ型および値を表現します。
❶””(空の文字列)
・データ型
 文字列 (String)
・表現
 ”” または ”
・意味
 文字列データ型で、文字列として空の文字を持つことを示します。つまり、文字列データ型の変数や値が何も含まないことを表します。
❷NULL
・データ型
 NULL
・表現
 NULL
・意味
 NULLは特別なデータ型で、値が存在しないことを示します。NULLは変数やデータベースフィールドに値が設定されていないことを表します。NULLは存在しない値として扱われ、通常のデータ型とは異なります。
 言語によっては、”” と NULL は異なるデータ型であり、異なる比較結果を返すことがあります。例えば、PHPにおいて “” と NULL を比較すると true が返りますが、== で比較すると true が返ることになります。ただし、=== を使用するとデータ型も一致させる必要があるため、”” === NULL は false となります。
 言語やコンテキストによって、”” と NULL の振る舞いは異なりますが、一般的には “” は空の文字列であり、NULL は値が存在しないことを示す特別なデータ型であると考えてください。

厳格に区別する方式が採用されたようです。ちょっと、気になるのは、違うなら、コードで表現した場合、それぞれのコードがあるような気がするのですが、ChatGPTからの回答はありませんでした?

[あとがき]
 かかりっきりというわけではないのですが、いろいろあり時間がかかっています。本日、Prototype EVEの管理システムで、管理者ユーザーのパスワードを変更しましたが、正常に変更できました。バッチ処理以外のシステムを動かしたのは、本日が初めてなので、感動です。
 そうそう、pro2grammer.comへアクセスできなくなっていました。ドメインの有効期限切れです。近頃、クライアントのVMWareで開発をしていのたので、気にしていませんでした。次に来るのはSSLの更新なのですが、それまでには、バッチ処理の製造を完了したいと願っています・・・。
 では、また!!!

コメント