簡體   English   中英

錯誤:文件已加密或不是數據庫

[英]Error: file is encrypted or is not a database

我使用PHP創建帶有表的數據庫。 我是通過以下方式做到的:

<?php
$db = new SQLiteDatabase("test.db");
unset($db);
$db = sqlite_open("test.db");
sqlite_query($db,"create table students (names char(255))");
sqlite_close($db);
?>

從命令行執行PHP文件后:“ php test.php”,我在目錄中獲得一個名為“ test.db”的新文件(這是我想要的)。 然后,在命令行中輸入“ sqlite3 test.db”。 這樣,我輸入了sqlite命令行會話。 然后,使用sqlite3,鍵入“ .tables”(我想檢查新數據庫是否包含應該包含的表)。 結果我得到:

Error: file is encrypted or is not a database 

因此,它不起作用。 有人知道這個問題嗎? 預先感謝您的任何幫助。

這是版本不匹配的問題。

要使用PHP5和SQLite打開數據庫,我們需要使用PDO而不是 sqlite_open()函數。 有關如何打開或創建數據庫的示例:

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

    $dbh = new PDO("sqlite:VPN0.sqlite");
    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");
}

echo "Database loaded successfully ....";

我遇到了同樣的問題,使用pdo代替sqlite_open()

這個鏈接非常有幫助,這是我的代碼段,可以正常工作,希望對您有所幫助

$dir = 'sqlite:YourPath/DBName.db';
$dbh  = new PDO($dir) or die("cannot open the database");
$query =  "SELECT * from dummy_table";
foreach ($dbh->query($query) as $row)
{
    echo $row[0];
}

這很可能是php sqlite版本與您的獨立sqlite可執行文件之間的版本不匹配。

請參見: http : //us3.php.net/manual/en/book.sqlite.php-在“用戶貢獻的筆記”下,作者是Andrew Paul Dickey。

要獲得快速解決方案,可以安裝和使用sqlite2獨立可執行文件。

我最近遇到了完全相同的問題,並弄清楚了發生了什么。 (是的,所有其他答案都是正確的-這是版本不匹配的問題。)A發布此消息以提供一些其他信息,這些信息可能會對遇到此問題的其他人有所幫助...

摘要:

該錯誤是由於以下事實導致的: sqlite3.exe命令行工具(實現SQLite版本3)無法讀取使用PHP的SQLite程序接口(實現SQlite版本2)創建的數據庫文件。

討論:

我正在關注一個教程,該教程描述了如何在PHP中使用SQLITE: SQLite PHP教程 (請注意,我在Windows XP上運行PHP 5.2.14)。 事實證明,PHP 5.2具有兩種(不兼容)與SQLite數據庫管理系統進行交互的方式。 一個過程API( SQLite )和一個面向對象的API( SQLite Functions(PDO_SQLITE) )。 程序API使用SQLite版本2,OOP API使用SQLite版本3。對於Windows PHP平台,通過在php.ini取消注釋此行來啟用程序API:

extension=php_sqlite.dll

通過取消注釋以下行來啟用OOP API:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

請注意,有一個免費的Win32工具,可以管理和操作任何版本的SQLite數據庫: SQLite Administrator 此工具允許將第2版數據庫(使用PHP的過程API創建)轉換為第3版數據庫,可以使用sqlite3.exe命令行工具讀取該數據庫。

這個問題已經有兩年了,但現在可以通過以下方式解決:

class MyDB extends SQLite3
{
    function __construct()
    {
            $dbFile = __DIR__ . '/../../../adminer/Dictionary.sqlite';
            $this->open($dbFile);
    }
}

$db = new MyDB();
$db->exec('CREATE TABLE students (names VARCHAR(80))');
echo "done";

來源: http : //php.net/manual/en/sqlite3.open.php

有一種更簡單的方法可以解決該問題。 您可以將sqlite 2數據庫文件轉換為sqlite3。我是在Mac OS X上使用SQLiteManager程序完成的。

為什么要兩次打開數據庫?

試試這個代碼:

<?php
$db = sqlite_open( "test.db", 066, $err );
sqlite_query( $db, "CREATE TABLE students (names VARCHAR(80))" );
sqlite_close( $db );
?>

編輯:Fin可能是正確的; 也許您必須使用phpinfo()檢查SQLite版本。

暫無
暫無

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

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