dba_open
打开数据库
&reftitle.description;
Dba\Connectionfalsedba_open
stringpath
stringmode
stringnullhandler&null;
intpermission0644
intmap_size0
intnullflags&null;
dba_open 用 mode 和 handler 为 path 建立一个数据库实例。
&reftitle.parameters;
path
数据库文件的路径。通常是文件系统中的一个常规路径。
mode
一个字符串,指定数据库的访问模式。它是一个字符,可以是 r 用于读取访问,
w 用于对已存在的数据库进行读写访问,
c 用于读写访问和数据,如果目前不存在,则创建数据库,
以及 n 用于创建、截断和读写访问。
数据库是以 BTree 模式创建的,不支持其他模式(如 Hash 或 Queue)。
此外,您可以使用下一个字符设置数据库锁定方法。使用 l 用 .lck
文件锁定数据库,或使用 d 锁定数据库文件本身。重要的是您的所有应用程序都要一致地这样做。
如果您想测试访问并且不想等待锁定,可以将 t 作为第三个字符添加。当您确信不需要数据库锁定时,
可以使用 - 代替 l 或 d。当 d、
l 或 - 都没有使用时,dba 将锁定数据库文件,就像使用 d 一样。
一个数据库文件只能有一个写入者。当您在 web 服务器上使用 dba 时,如果有多个请求需要写入操作,
它们只能一个接一个地进行。在写入时不允许读取。dba 扩展使用锁来防止这种情况。请参阅下表:
DBA 锁定
已经打开
mode = "rl"
mode = "rlt"
mode = "wl"
mode = "wlt"
mode = "rd"
mode = "rdt"
mode = "wd"
mode = "wdt"
未打开
ok
ok
ok
ok
ok
ok
ok
ok
mode = "rl"
ok
ok
wait
false
illegal
illegal
illegal
illegal
mode = "wl"
wait
false
wait
false
illegal
illegal
illegal
illegal
mode = "rd"
illegal
illegal
illegal
illegal
ok
ok
wait
false
mode = "wd"
illegal
illegal
illegal
illegal
wait
false
wait
false
ok: 第二次调用将成功。
wait: 第二次调用将等待,直到第一个调用 dba_close。
false: 第二次调用返回 false。
illegal: 不能混合 "l" 和 "d" 修饰符用于 mode 参数。
handler
用于访问 path 的 处理器 的名称。
它接收所有给定给 dba_open 的可选参数,
并可以代表它们执行操作。如果 handler 是 &null;,则调用默认处理器。
permission
可选的 &integer; 参数,传递给驱动程序。它的含义与 chmod 的 permissions 参数相同,
默认为 0644。
db1、db2、db3、db4、
dbm、gdbm、ndbm 和 lmdb
驱动程序支持 permission 参数。
map_size
可选的 &integer; 参数,传递给驱动程序。它的值应该是 OS 的页面大小的倍数,或者是零,以使用默认的映射大小。
只有 lmdb 驱动程序接受 map_size 参数。
flags
传递给数据库驱动程序的标志。如果 &null;,将提供默认标志。
目前,只有 LMDB 驱动程序支持以下标志
DBA_LMDB_USE_SUB_DIR 和
DBA_LMDB_NO_SUB_DIR。
&reftitle.returnvalues;
成功时返回一个 Dba\Connection 实例,&return.falseforfailure;。
&reftitle.errors;
如果 handler 为 &null;,但没有默认处理器,则返回 &false;
并发出一个 E_WARNING 级别的错误。
&reftitle.changelog;
&Version;
&Description;
8.4.0
现在返回一个 Dba\Connection 实例;
以前返回一个 &resource;。
8.2.0
flags 参数被添加。
8.2.0
handler 现在可以为 &null;。
7.3.14, 7.4.2
lmdb 驱动现在支持额外的 map_size 参数。
&reftitle.seealso;
dba_popen
dba_close