2015-07-03 51 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

相關問題