こんにちは!
ナビゲータのEVEです。
Prototype EVEなのですが、まだログインできていません。その言い訳を本日はさせていただきます。
[UNLOCK]
テーブルのUNLOCKができません。既存のロジックではエラーになるのです。試験の時はエラーになった記憶はないのですが・・・。そもそもここのロジック試験したかどうか怪しい・・・。mysqlの拡張モジュールからPDOへ書き換えた形跡はあります。もしかしたら、コピペしただけだったかもしれません。
そんなことを調べていても仕方がないので、ChatGPTに、データベース(MYSQL)のLOCKの解除方法について聞いてみました。
<?php
// データベース接続情報
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
// データベース接続
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "データベース接続エラー: " . $e->getMessage();
die();
}
// ロックの取得
$pdo->beginTransaction(); // トランザクション開始
$pdo->exec("LOCK TABLES your_table WRITE"); // ロックを取得
// ロックされたデータの操作(ここで必要な処理を実行)
// ロック解除
$pdo->exec("UNLOCK TABLES"); // ロック解除
$pdo->commit(); // トランザクションをコミットして確定
// データベース接続を閉じる
$pdo = null;
?>
これは、ChatGPTからもらったソースなのですが、そのソースの赤字の部分だけ頂いて、Prototype EVEに移植してみました。これでもうまくいかない・・・。LOCKではエラーにならないのですが、なぜ???追加で、Bingにも同じ質問をしましたが、同じ解答でした。
エラーつぶしてからになりそうですが、ChatGPTのソースが現在の環境で動作するかどうかの試験が必要なようです。動作するなら、Prototype EVEの問題だし、そうでなければ、そのそもChatGPTのロジックが使えないと言うことになります。予想外のところで時間が取られています。
[継承先(子)から継承元(親)のPrivate変数が見えない]
子にはない親のPrivate変数の内容を参照するのですが、思った内容に変更されていません。おかしいな〜っていうことで、イベント発生ポイントからプログラムを順におって内容を確認したのですが、やらかしていたようです。
PHPでは、子から親のPrivate変数が見えません。
それを知っているにもかかわらず、子から親のPrivate変数へシャドーコピーしているロジックがありました。ただ、そのロジックはエラーにはなりません。そのロジックが無効になり、値が変更されないだけなのです。ロジックが長い上に、それ以外にもエラーがたくさん出ている現状なので、時間がかかりました。
修正方法としては、親にPrivate変数へ値を設定するメソッド(setter)を新規追加し問題は解決されています(参照する場合はgetterを利用します)
。
[あとがき]
大きなバグは以上の2点でしょうか?他は、単純なエラーです。エラーもしくはワーニングの箇所が特定できればすぐに修正できるモノばかりです。
これから、本日もログイン試験を実施しますが、まず最初に現在出力されている、エラーもしくは、ワーニングをつぶすことに注視したいと思います。前回、PHP5とPHP8は相性がよくエラーもしくはワーニングがあまり出ないという話をしましたが、勘違いだったかもしれません。
では、また!!!