簡體   English   中英

文件已加密或不是數據庫-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庫3.7.7.1在我的centos服務器上,我有SQLite庫3.6.20

現在的問題是如何更新php sqlite擴展。 我無法更新整個php(可能會導致錯誤)

像yum install php-pdo,yum install php5-sqlite3這樣的命令不起作用

有時,將php-scripts從一台主機移到另一台時會出現此錯誤。 最常見的是sqlite WAL模式下的錯誤:

PRAGMA journal_mode = WAL;

要解決此問題,您需要在數據庫中禁用此選項。 通過將文件數據庫\\ x02 \\ x02中的2個字節替換為\\ x01 \\ x01到地址\\ x12(12月18日)來執行此操作的最簡單方法:在bash中,可以使用以下命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM