Подтвердить что ты не робот

Ошибка: файл зашифрован или не является базой данных

Я использовал 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 

Итак, это не сработает. Кто-нибудь знает что-то об этой проблеме? Заранее благодарю за любую помощь.

4b9b3361

Ответ 1

Хорошо, никогда не поздно обновить сообщение... на случай, если кто-то столкнется с этой проблемой...

Вы, ребята, действительно правы, это проблема несоответствия версии.

Чтобы открыть БД с использованием 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 ....";

Ответ 2

Я столкнулся с той же проблемой, используйте 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];
}

Ответ 3

это, скорее всего, несовпадение версии между версией php sqlite и вашим автономным исполняемым файлом sqlite.

см. это: http://us3.php.net/manual/en/book.sqlite.php - в разделе "примечания, внесенные пользователем", от Andrew Paul Dickey.

для быстрого решения, которое вы можете установить и использовать автономный исполняемый файл sqlite2.

Ответ 4

Недавно я столкнулся с такой же проблемой и выяснил, что происходит. (Да, все остальные ответы верны - это проблема несоответствия версии.) Представляю это, чтобы предоставить дополнительную информацию, которая может быть полезной для других, сталкивающихся с этой проблемой...

Резюме:

Ошибка связана с тем, что инструмент командной строки sqlite3.exe (который реализует SQLite версии 3) не может читать файлы базы данных, созданные с помощью процедурного интерфейса PHP, для SQLite (который реализует SQlite версии 2).

Обсуждение

Я следую учебнику, в котором описывается, как использовать SQLITE с PHP: учебник по SQLite PHP (обратите внимание, что я запускаю PHP 5.2.14 на Windows XP). Как оказалось, PHP 5.2 имеет два (несовместимых) способа взаимодействия с системой управления базами данных SQLite; процедурный API (SQLite) и объектно-ориентированный API (Функции SQLite (Pdo_Sqlite)). Процедурный API использует SQLite версии 2, а API OOP использует SQLite версии 3. Для платформ Windows PHP процедурный API включен, раскомментируя эту строку в php.ini:

extension=php_sqlite.dll

В то время как API ООП включен, раскомментируя эти строки:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

Обратите внимание, что есть бесплатный инструмент Win32, который позволяет администрировать и манипулировать любой версией баз данных SQLite: SQLite Administrator. Этот инструмент позволяет конвертировать базу данных версии 2 (созданную с процедурным API PHP) в базу данных версии 3, которая может быть прочитана с помощью инструмента командной строки sqlite3.exe.

Ответ 5

Вопрос - два года, но теперь его можно решить следующим образом:

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

Ответ 6

Почему вы открываете db два раза?

Попробуйте этот код:

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

Изменить: Fin, вероятно, прав; возможно, вам нужно проверить версию SQLite с помощью phpinfo().

Ответ 7

Есть еще один простой способ решить эту проблему. Вы можете преобразовать файл базы данных sqlite 2 в sqlite 3. Я сделал это с помощью программы SQLiteManager на Mac OS X.