Error: file is encrypted or is not a database

2019-01-07 19:27发布

I used PHP to create a database with a table. I did it in the following way:

<?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);
?>

After I execute my PHP file from the command line: "php test.php" I get a new file in my directory which is called "test.db" (this is what I wanted). Than, in the command line, I type "sqlite3 test.db". In this way I enter in the sqlite command line session. Then, withing sqlite3, I type ".tables" (I wanted to check if a new database contains tables which it is supposed to contain). As the result I get:

Error: file is encrypted or is not a database 

So, it does not work. Does anybody know something about this problem? Thank you in advance for any help.

7条回答
smile是对你的礼貌
2楼-- · 2019-01-07 19:38

I faced the same problem, use pdo instead of sqlite_open()

this link is very helpful and here is my code snippet, works perfectly, hope it helps

$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];
}
查看更多
Explosion°爆炸
3楼-- · 2019-01-07 19:39

There's one more simple way to solve that problem. You can convert sqlite 2 database file to sqlite 3. I did that with SQLiteManager program on Mac OS X.

查看更多
你好瞎i
4楼-- · 2019-01-07 19:45

The question is two years old but now it can be solved this way:

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";

Source: http://php.net/manual/en/sqlite3.open.php

查看更多
趁早两清
5楼-- · 2019-01-07 19:46

this is most likely an version mismatch between the php sqlite version and your standalone sqlite executable.

see this: http://us3.php.net/manual/en/book.sqlite.php - under "user contributed notes", from Andrew Paul Dickey.

for a quick solution you can install and use the sqlite2 standalone executable.

查看更多
Bombasti
6楼-- · 2019-01-07 19:52

I recently encountered this exact same problem and have figured out what is going on. (Yes all the other answers are correct - it is a version mismatch problem.) A am posting this to provide some additional information that may be helpful to others encountering this problem...

Summary:

The error is due to the fact that the sqlite3.exe command line tool (which implements SQLite version 3), cannot read database files created using PHP's procedural interface to SQLite (which implements SQlite version 2).

Discussion:

I am following a tutorial which describes how to use SQLITE with PHP: SQLite PHP tutorial (Note that I am running PHP 5.2.14 on Windows XP). As it turns out PHP 5.2 has two (incompatible) ways of interfacing with the SQLite database management system; a procedural API (SQLite) and an object oriented API (SQLite Functions (PDO_SQLITE)). The procedural API uses SQLite version 2 and the OOP API uses SQLite version 3. For Windows PHP platforms, the procedural API is enabled by uncommenting this line in php.ini:

extension=php_sqlite.dll

While the OOP API is enabled by uncommenting these lines:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

Note that there is a free Win32 tool that allows administration and manipulation of any version of SQLite databases: SQLite Administrator. This tool allows one to convert a version 2 database (created with the procedural API of PHP) into a version 3 database that can be read using the sqlite3.exe command line tool.

查看更多
祖国的老花朵
7楼-- · 2019-01-07 19:53

Why do you open the db two times ?

Try this code:

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

Edit: Fin is probably right; maybe you have to check the SQLite version with phpinfo().

查看更多
登录 后发表回答