Php 使用PDO以只读方式打开SQLite3?

Php 使用PDO以只读方式打开SQLite3?,php,sqlite,pdo,Php,Sqlite,Pdo,SQLite3类有这样一个选项 $db = new SQLite3('mysqlitedb.db', SQLITE3_OPEN_READONLY); 在PDO中,您只需通过以下方式打开: $db = new PDO('sqlite:mysqlitedb.db'); 然而,我的问题是,有没有一种方法可以在只读模式下用PDO打开数据库?我认为这在PDO中是不可能的(还没有?。 PHP5.3的pdo_sqlite驱动程序在pdo_sqlite_handle_factory()中使用,但需要sqli

SQLite3类有这样一个选项

$db = new SQLite3('mysqlitedb.db', SQLITE3_OPEN_READONLY);
在PDO中,您只需通过以下方式打开:

$db = new PDO('sqlite:mysqlitedb.db');

然而,我的问题是,有没有一种方法可以在只读模式下用PDO打开数据库?

我认为这在PDO中是不可能的(还没有?。
PHP5.3的pdo_sqlite驱动程序在
pdo_sqlite_handle_factory()
中使用,但需要sqlite3_open_v2()来传递只读标志

编辑:

但修补是相当容易的。看看ext/pdo_mysql/mysql_driver.c中的
pdo_mysql\u handle_factory()
,以及它如何使用
struct pdo_data\u src_parser vars[]
解析dns字符串。

随着PHP7.3的发布(预计将于2018年底发布),这将成为可能

语法如下:

$db = new PDO('sqlite:mysqlitedb.db', null, null, [PDO::SQLITE_ATTR_OPEN_FLAGS => PDO::SQLITE_OPEN_READONLY]);

这确实是可用的,因为PHP 7.3(现在使用PHP 7.3.3进行测试)如果您尝试在数据库中写入内容,它将返回“尝试写入只读数据库”错误。但是,这并不意味着其他人可以同时写入数据库。它仍然锁定数据库。例如,如果您试图在同一数据库上同时在命令行中使用sqlite3,并尝试写入某些内容,您将得到一个“Error:database is locked”错误。