【问题标题】:Opening SQLite3 as READONLY with PDO?使用 PDO 以只读方式打开 SQLite3?
【发布时间】:2009-08-29 20:13:02
【问题描述】:

SQLite3 类有一个这样的选项。

$db = new SQLite3('mysqlitedb.db', SQLITE3_OPEN_READONLY);

在 PDO 中,您只需打开:

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

但是,我的问题是,有没有办法在 READONLY 模式下使用 PDO 打开数据库?

【问题讨论】:

    标签: php sqlite pdo


    【解决方案1】:

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

    语法如下:

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

    Upstream commit

    【讨论】:

    • 这在 PHP 7.3 之后确实可用(现在用 PHP 7.3.3 测试)
    • 如果您尝试在数据库中写入内容,它将返回“尝试写入只读数据库”错误。但是,这并不意味着其他人可以同时写入数据库。它仍然锁定数据库。例如,如果您尝试在同一数据库的命令行中同时使用 sqlite3,并尝试编写一些东西,您将收到“错误:数据库已锁定”错误。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多