アフィリエイト広告を利用しています
検索
<< 2023年10月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2023年10月25日

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の更新なのですが、それまでには、バッチ処理の製造を完了したいと願っています・・・。

 では、また!!!

タグ:php VMWare NULL