【问题标题】:file is encrypted or is not a database - sqlite文件已加密或不是数据库 - sqlite
【发布时间】:2015-12-12 19:59:16
【问题描述】:

我无法打开一个 sqlite 文件

在命令行中我得到这个:

#sqlite3 sms.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from message;
Error: file is encrypted or is not a database

错误不是在我连接时,而是在我运行查询时

检查文件让我明白了

# file sms.db
sms.db: SQLite 3.x database

所以应该不是版本问题——比如用 sqlite3 打开一个 sqlite2 文件

在 php 中我有这个:

try 
{
    /*** connect to SQLite database ***/

    $db = new PDO("sqlite:path/sms.db");
    echo "Handle has been created ...... <br><br>";

}
catch(PDOException $e)
{
    echo $e->getMessage();
    echo "<br><br>Database -- NOT -- loaded successfully .. ";
    die( "<br><br>Query Closed !!! $error");
}

$result = $db->query('SELECT * from message') or var_dump($db->errorInfo());

得到这个(不是在连接时,而是在执行查询时)

array(3) { [0]=> string(5) "HY000" [1]=> int(26) [2]=> string(38) "file is encrypted or is not a database" } 

我为 firefox 使用了 Sql 管理器扩展,在那里我可以毫无问题地打开文件(并且在没有任何加密或密码的情况下运行任何查询)。这对我来说真的很奇怪。在过去的几个小时里,我已经对此进行了搜索,但没有找到任何解决方案。任何帮助,将不胜感激。


我刚刚在windows上测试过,可以打开数据库了。我认为问题与 sqlite 驱动程序有关。

在 Windows 上,我有 SQLite Library 3.7.7.1 在我的 centos 服务器上,我有 SQLite Library 3.6.20

现在的问题是如何更新 php sqlite 扩展。我无法更新整个 php(可能会导致错误)

yum install php-pdo, yum install php5-sqlite3 等命令不起作用

【问题讨论】:

    标签: php sqlite


    【解决方案1】:

    在将 php 脚本从一个主机移动到另一个主机时,有时我会收到此错误。 大多数情况下,它是 sqlite WAL 模式中的错误:

    PRAGMA journal_mode = WAL;
    

    要解决此问题,您需要在数据库中禁用此选项。 最简单的方法是将文件数据库中的 2 个字节 \x02\x02 替换为 \x01\x01 到地址 \x12 (dec 18) 在 bash 中,您可以使用命令:

    do printf '\x01\x01' | dd of=basename.db bs=1 seek=18 count=2 conv=notrunc
    

    【讨论】:

    • 最后我只是用java打开数据库。你只需要包含一个 jar 并且你不需要在你的服务器上修改任何东西
    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多