2015-07-03 164 views
0

我有一些麻烦,打开一个源码文件文件进行加密或不是一个数据库 - 源码

在命令行中我得到这个:

#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库3.7.7.1 在我的CentOS的服务器我有SQLite库3.6.20

现在的问题是我怎么更新PHP源码扩展。我不能更新整个PHP(可能会导致错误)

命令像百胜安装PHP-PDO,百胜安装PHP5-sqlite3的,不工作

回答

1

有时从一个移动的PHP脚本时,我得到这个错误托管到另一个。 它经常是错误的模式sqlite的WAL:

PRAGMA journal_mode = WAL; 

为了解决这个问题,你需要禁用数据库中的这个选项。 最简单的方法通过在文件数据库替换2个字节做到这一点\ X02 \ X02到\ X01 \ X01的地址\ X12(12月18日) 在bash中,你可以使用命令:

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

在最后我刚用java打开数据库。你只需要添加一个jar文件,而不必修改服务器上的任何内容 – user1611597

相关问题