PHP SQLite3类不包含文件名信息,或者提供了一种获取SQLite引擎打开的主文件的方法。
如何确定文件名?
这可能在单元测试中很有意思,以确保客户端使用的文件与配置中的预期文件匹配。
答案 0 :(得分:2)
如果SQLite3类没有提供返回此信息的属性或方法,则SQLite有一个PRAGMA语句来获取或设置内部数据或修改库行为。
PRAGMA database_list;
它将返回一行,其中包含seq,name,文件字段,分别包含序列ID,数据库的内部名称和文件路径:
0|main|/path/to/yourdatabasefile.db
有些细节值得关注。
单元测试案例示例:
测试当前$ client连接文件是否与$ config-> databaseFilename:
匹配/**
* Tests the SQLite client connection
*/
function testClient () {
$client = ...
$config = ...
$row = $client->query("PRAGMA database_list")->fetchArray(SQLITE3_ASSOC);
$this->assertEquals(
[
'seq' => 0,
'name' => 'main',
'file' => realpath($config->databaseFilename)
],
$row,
"The query PRAGMA database_list didn't return what we expected: one database opened by the client, the file returned by the database matching our configuration file."
);
}
要测试查询是否返回预期结果,一个有效的方法是比较两个数组,一个是预期结果,另一个是fetchArray返回的行。
默认情况下,fetchArray存储两个字段值,一个带有数字索引,另一个带有关联键。这里我们关注包含正确信息的字段,因此我们使用SQLITE3_ASSOC参数来仅获取关联内容。如果您想测试订单,请使用fetchArray(SQLITE3_NUM):
$row = $client->query("PRAGMA database_list")->fetchArray(SQLITE3_NUM);
$this->assertEquals(
[0, 'main', realpath($config->databaseFilename)]
$row,
"The query PRAGMA database_list didn't return what we expected: one database opened by the client, the file returned by the database matching our configuration file."
);
realpath函数用于获取规范路径。
<强>参考文献:强>