Ошибка: файл зашифрован или не является базой данных
Я использовал 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
Итак, это не сработает. Кто-нибудь знает что-то об этой проблеме? Заранее благодарю за любую помощь.
Ответы
Ответ 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.