错误:文件已加密或不是数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:文件已加密或不是数据库相关的知识,希望对你有一定的参考价值。

我用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()

this link非常有帮助,这是我的代码片段,工作完美,希望它有所帮助

$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独立可执行文件。

另一答案

我最近遇到了这个完全相同的问题并且已经弄清楚发生了什么。 (是的所有其他答案都是正确的 - 这是一个版本不匹配的问题。)我发布此信息是为了提供一些其他信息,可能对其他遇到此问题的人有帮助...

摘要:

该错误是由于sqlite3.exe命令行工具(实现SQLite版本3)无法读取使用PHP的SQLite过程接口创建的数据库文件(实现SQlite版本2)。

讨论:

我正在按照教程描述如何在PHP中使用SQLITE:SQLite PHP tutorial(请注意,我在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创建)转换为可以使用sqlite3.exe命令行工具读取的版本3数据库。

另一答案

问题是两年了,但现在可以通过这种方式解决:

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

另一答案

为什么要打开数据库两次?

试试这段代码:

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

编辑:Fin可能是对的;也许你必须用phpinfo()检查SQLite版本。

另一答案

有一种更简单的方法可以解决这个问题。您可以将sqlite 2数据库文件转换为sqlite 3.我在Mac OS X上使用SQLiteManager程序执行此操作。

以上是关于错误:文件已加密或不是数据库的主要内容,如果未能解决你的问题,请参考以下文章

文件已加密或不是数据库

无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)

如何测试 Core Data SQLite 文件是不是已加密?

我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误

远程桌面连接已断开 由于数据加密错误---和本地连接修复错误

C# 判断 SQLite 数据库文件是不是经过密码加密