gpt4 book ai didi

sqlite - pdo sqlite::memory:共享和终身

转载 作者:行者123 更新时间:2023-12-03 18:56:29 32 4
gpt4 key购买 nike

有人可以解释一下sqlite :: memory如何工作吗?据我了解,它仅适用于每个实例,因此您不能例如使用一个PDO实例创建数据库模式,并使用sqlite :: memory通过另一个PDO实例填充刚刚创建的表?
您只需要将PDO实例作为参数传递或使其全局?

我为什么要问,这是因为我正在读一本有关单元测试的书,在一个示例中,他们用表Users创建了一个内存数据库,并用一条记录填充了它,这是通过phpUnit setUp()方法和阅读该表由PDO的另一个实例完成,该实例是用实际代码创建的,必须进行测试。
在我看来,PDO内存数据库的每个实例都有其自己的独立数据库,但也许我缺少了一些东西。
谢谢您的意见,谢谢。

$ schema = <<< SQL
创建表“用户”(
“ id”整数主键自动增加,不为NULL,
“用户名” VARCHAR UNIQUE NOT NULL,
“电子邮件” VARCHAR UNIQUE NOT NULL,
“代码” VARCHAR
);
SQL;

$ dsn ='sqlite ::内存:';

// instance1
$ db1 =新的PDO($ dsn);
$ db1-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);
$ db1-> exec($ schema);

$ db1-> exec(
“插入用户(用户名,电子邮件)
VALUES('John Doe','user @ example。com');“
);

$ statement1 = $ db1-> prepare('SELECT * FROM Users WHERE email =:email;');
var_dump($ statement1);回声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($ statement2);回声PHP_EOL; // PDOException”,并显示消息“ SQLSTATE [HY000]:一般错误:1没有此类表:Users...。

最佳答案

如代码所示,每个new PDO('sqlite::memory:')调用都会创建一个新的独立内存数据库。

我不知道那本书是做什么的,但是如果您要重用内存数据库,则必须确保测试设置和您的实际代码共享相同的数据库连接。

关于sqlite - pdo sqlite::memory:共享和终身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814644/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com