Я использовал 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";
Почему вы открываете 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.