我使用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
型
所以,它不工作。有人知道这个问题吗?提前感谢您的任何帮助。
7条答案
按热度按时间eimct9ow1#
这是一个版本不匹配的问题。
要使用PHP5和SQLite打开数据库,我们需要使用PDO而不是
sqlite_open()
函数。如何打开或创建数据库的示例:字符串
wecizke32#
我也遇到了同样的问题,使用pdo而不是sqlite_open()
this link是非常有帮助的,这里是我的代码片段,工作完美,希望它有帮助
字符串
bttbmeg03#
这很可能是php sqlite版本和您的独立sqlite可执行文件之间的版本不匹配。
参见:https://www.php.net/manual/en/book.sqlite.php-在“用户贡献的笔记”下,来自Andrew Paul Dickey。
对于快速解决方案,您可以安装并使用sqlite 2独立可执行文件。
kpbwa7wx4#
我最近遇到了这个完全相同的问题,并找出了发生了什么事。(是的,所有其他答案都是正确的-这是一个版本不匹配的问题。)我张贴这一点提供一些额外的信息,可能有助于其他人遇到这个问题.
总结:
该错误是由于
sqlite3.exe
命令行工具(实现SQLite版本3)无法读取使用PHP的SQLite(实现SQLite版本2)过程接口创建的数据库文件。讨论:
我正在学习一个教程,它描述了如何在PHP中使用SQLITE:SQLite PHP tutorial(注意我在Windows XP上运行的是PHP 5.2.14)。(不兼容)与SQLite数据库管理系统接口的方式;程序化API(SQLite)和面向对象的API(SQLite Functions (PDO_SQLITE))。过程API使用SQLite版本2,OOP API使用SQLite版本3。对于Windows PHP平台,通过在
php.ini
中取消注解这一行来启用过程API:extension=php_sqlite.dll
个当OOP API通过取消注解这些行来启用时:
extension=php_pdo.dll
个extension=php_pdo_sqlite.dll
个请注意,有一个免费的Win32工具允许管理和操作任何版本的SQLite数据库:SQLite Administrator。该工具允许将版本2数据库(使用PHP的过程API创建)转换为可以使用
sqlite3.exe
命令行工具读取的版本3数据库。xzabzqsa5#
这个问题已经存在了两年,但现在可以这样解决:
字符串
来源:http://php.net/manual/en/sqlite3.open.php
v64noz0r6#
你为什么要开两次车?
试试这个代码:
字符串
编辑:Fin可能是对的;也许你必须用phpinfo()检查SQLite版本。
gdx19jrr7#
还有一个更简单的方法来解决这个问题。你可以将sqlite 2数据库文件转换为sqlite 3。我在Mac OS X上用SQLiteManager程序做到了这一点。