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

w8f9ii69  于 2023-11-21  发布在  SQLite
关注(0)|答案(7)|浏览(140)

我使用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


所以,它不工作。有人知道这个问题吗?提前感谢您的任何帮助。

eimct9ow

eimct9ow1#

这是一个版本不匹配的问题。
要使用PHP5和SQLite打开数据库,我们需要使用PDO而不是sqlite_open()函数。如何打开或创建数据库的示例:

/*** connect to SQLite database ***/

    $dbh = new PDO("sqlite:VPN0.sqlite");
    echo "Handle has been created ...... <br><br>";

字符串

wecizke3

wecizke32#

我也遇到了同样的问题,使用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];
}

字符串

bttbmeg0

bttbmeg03#

这很可能是php sqlite版本和您的独立sqlite可执行文件之间的版本不匹配。
参见:https://www.php.net/manual/en/book.sqlite.php-在“用户贡献的笔记”下,来自Andrew Paul Dickey。
对于快速解决方案,您可以安装并使用sqlite 2独立可执行文件。

kpbwa7wx

kpbwa7wx4#

我最近遇到了这个完全相同的问题,并找出了发生了什么事。(是的,所有其他答案都是正确的-这是一个版本不匹配的问题。)我张贴这一点提供一些额外的信息,可能有助于其他人遇到这个问题.

总结:

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

讨论:

我正在学习一个教程,它描述了如何在PHP中使用SQLITE:SQLite PHP tutorial(注意我在Windows XP上运行的是PHP 5.2.14)。(不兼容)与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数据库。

xzabzqsa

xzabzqsa5#

这个问题已经存在了两年,但现在可以这样解决:

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

v64noz0r

v64noz0r6#

你为什么要开两次车?
试试这个代码:

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

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

gdx19jrr

gdx19jrr7#

还有一个更简单的方法来解决这个问题。你可以将sqlite 2数据库文件转换为sqlite 3。我在Mac OS X上用SQLiteManager程序做到了这一点。

相关问题