sqlite::memory の仕組みを説明してくれる人はいますか? 私が理解したように、インスタンスごとにのみ機能するため、たとえば、PDO の 1 つのインスタンスを使用して db スキーマを作成し、作成したばかりのテーブルを別の PDO インスタンスを介して sqlite::memory で埋めることはできませんか? PDOインスタンスをparamとして渡すか、グローバルにするだけですか?
なぜ私が尋ねているのですか、それはユニットテストに関する本を読んでいて、例の1つでは、テーブルUsersでメモリデータベースを作成し、1つのレコードで埋めているからです。これはphpUnit setUp()メソッドで行われ、テーブルは、テストする必要がある実際のコードで作成された PDO の別のインスタンスによって行われます。PDO メモリ db の各インスタンスに独自の個別の db があることは論理的に思えますが、何か不足している可能性があります。ご意見をいただければ幸いです。
$schema =<<<SQL CREATE TABLE "ユーザー" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 「ユーザー名」 VARCHAR UNIQUE NOT NULL, "email" VARCHAR UNIQUE NOT NULL, 「コード」VARCHAR ); SQL; $dsn = 'sqlite::memory:'; //インスタンス1 $db1 = 新しい PDO($dsn); $db1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db1->exec($schema); $db1->exec( "INSERT INTO ユーザー(ユーザー名、メールアドレス) VALUES('John Doe', 'user@example .com');" ); $statement1 = $db1->prepare('SELECT * FROM Users WHERE email =:email;'); var_dump($文1); PHP_EOL をエコーします。//object(PDOStatement).... //instance2 が inst1 メモリ データベースにアクセスしようとして失敗する $db2 = 新しい PDO($dsn); //メモリデータベースも $db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement2 = $db2->prepare('SELECT * FROM Users WHERE email =:email;'); var_dump($文2); PHP_EOL をエコーします。//PDOException' とメッセージ 'SQLSTATE[HY000]: 一般エラー: 1 そのようなテーブルはありません: ユーザー ....