谁能解释一下 sqlite::memory 是如何工作的?据我了解,它仅适用于每个实例,因此您不能例如使用 PDO 的一个实例创建数据库模式并通过另一个 PDO 实例使用 sqlite::memory 填充刚刚创建的表?您只需将 PDO 实例作为参数传递或使其成为全局变量?
我为什么要问,这是因为我正在阅读一本关于单元测试的书,在其中一个示例中,他们使用表 Users 创建了一个内存数据库并用一条记录填充它,这是在 phpUnit setUp() 方法和阅读表是由另一个 PDO 实例完成的,该实例是在必须测试的真实代码中创建的。对我来说,PDO 内存数据库的每个实例都有自己独立的数据库,这似乎是合乎逻辑的,但也许我遗漏了一些东西。非常感谢您的意见,谢谢。
$模式=<<<SQL 创建表“用户”( “id”整数主键自动增量不为空, “用户名” VARCHAR UNIQUE NOT NULL, “电子邮件” 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->执行( “插入用户(用户名,电子邮件) VALUES('John Doe', 'user@example.com');" ); $statement1 = $db1->prepare('SELECT * FROM Users WHERE email =:email;'); var_dump($statement1); 回声 PHP_EOL; //对象(PDOStatement).... //instance2 访问 inst1 内存 db 失败 $db2 = 新 PDO($dsn); //还有内存数据库 $db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement2 = $db2->prepare('SELECT * FROM Users WHERE email =:email;'); var_dump($statement2); 回声 PHP_EOL; //PDOException',带有消息'SQLSTATE [HY000]:一般错误:1没有这样的表:用户......