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

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

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

Резюме:

Ошибка связана с тем, что sqlite3.exe командной строки 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 Functions (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 . Этот инструмент позволяет конвертировать базу данных версии 2 (созданную с процедурным API PHP) в базу данных версии 3, которая может быть прочитана с помощью sqlite3.exe командной строки 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

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

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

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

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

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