そこで、ようやく PHP オフィス アプリのベースのリファクタリングを開始しました。シングルトン PDO クラスに基づいて新しい機能を追加し、アプリ全体に展開する予定でした。それは非常に簡単で、(今のところ)機能しています。
class DB {
protected static $instance;
protected function __construct() {}
public static function getInstance()
{
if( empty( self::$instance ) )
{
$dsn = 'pgsql:host=' . Config::$a .
';dbname=' . Config::$b .
';port=' . Config::$c .
';connect_timeout=15';
$db_user = Config::$d;
$db_pass = Config::$e;
try
{
self::$instance = new PDO( $dsn, $db_user, $db_pass );
self::$instance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
new Log( 6, "DB Class failed to connect to dbase: $e" );
}
}
return self::$instance;
}
}
今日の午後、このシングルトン db-connection クラスについて .NET プログラマーである私の友人に話しています。彼は、シングルトンを使用してデータベースに接続すると、スレッド化の問題が発生する可能性があると警告しています。
何人かのユーザーがアプリを使用し、ほとんどすべての機能が (複数の) db-queries に関連しています。2 人のユーザーが同時にクエリを実行することは考えられません。
PDO(またはPHP、またはApache(オフィス)、またはNginx(自宅のテスト環境))はこれに対処できますか?たぶん、すべてのユーザーに新しいインスタンスが与えられますか? スレッドの問題を回避するために、クエリ/更新/挿入/削除ごとにデータベースをロックするトランザクションと一緒にこのシングルトンを使用する必要がありますか? それとも、私の友人が間違っているので、心配する必要はありませんか?
洞察のためのThx!