使用PDO将SQLite3打开为READONLY?

Kar*_*ing 11 php sqlite pdo

SQLite3类有这样的选项.

$db = new SQLite3('mysqlitedb.db', SQLITE3_OPEN_READONLY);
Run Code Online (Sandbox Code Playgroud)

在PDO中,您只需打开:

$db = new PDO('sqlite:mysqlitedb.db');
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法用READOLY模式打开PDO数据库?

ant*_*an1 6

随着 PHP 7.3 的发布(预计在 2018 年末发布),这将成为可能。

语法如下:

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

上游提交


Vol*_*erK 2

我认为 pdo 不可能(还?)。
php 5.3 的 pdo_sqlite 驱动程序使用sqlite3_open(),但pdo_sqlite_handle_factory()您需要 sqlite3_open_v2() 来传递只读标志。

编辑:
但是补丁会相当容易。查看pdo_mysql_handle_factory()ext/pdo_mysql/mysql_driver.c 以及它如何用于struct pdo_data_src_parser vars[]解析 dns 字符串。