文件已加密或不是数据库-sqlite


file is encrypted or is not a database - sqlite

打开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-qlite3这样的命令不起作用

有时在将php脚本从一个宿主移动到另一个宿主时会出现此错误。最常见的是sqlite WAL:模式中的错误

PRAGMA journal_mode = WAL;

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

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