为什么类'SQLiteDatabase'在/var/www/*.php找不到?

我正在尝试从PHP使用sqlite。 我有以下简单的代码:

<?php $db = new SQLiteDatabase("test2.sdb"); unset($db); ?> 

由于这个代码(我在命令行“php test2.php”中执行)的结果是:

 Fatal error: Class 'SQLiteDatabase' not found in /var/www/test2.php on line 3 

有谁知道我怎么能让PHP能够使用sqlite?

PS 在这里,我发现“从PHP 5.0开始的标准Linux PHP编译默认情况下启用SQLite支持”。 我有“PHP版本=> 5.2.6-2ubuntu4.6”。 所以,应该启用sqlite,除非“–disable-sqlite”。 在我的情况下输出“phpinfo();” 根本不包含“sqlite”。

Google上有相同的问题,但没有确切的解决scheme。

仔细检查你的SQLlite扩展是否在PHP中被启用,你应该能够使用sqlite_ *系列函数(如sqlite_open)而不是OOP方法,这并不理想。

也只是检查你的PECL模块的sqlite是> = 1.0.0。

SQLiteDatabase类是sqlite库中的一个对象,该对象在PHP 5.4中被删除,但是在不同的系统上,configuration可能会在之前的版本中被禁用,因为这个库被长期标记为不推荐使用

新版本的PHP不再支持库php_sqlite.dll (Windows)或php_sqlite.so (Linux),并分别用php_sqlite3.dllphp_sqlite3.soreplace。

您可以:

  1. 尝试find在互联网上的某处php_sqlite.dllphp_sqlite.so )。 像这样的链接可能对您有所帮助。 但是,你必须仔细匹配旧的SQLite库文件到你的PHP平台( x64x86 ),构build引擎( VC6VC9VC11 ),版本( 5.x )和types( TS线程安全NTS 为非线程安全 )。 这可能是一个艰巨的任务。

  2. php_sqlite.dllSQLiteDatabase )留下,然后发往新的php_sqlite3.dllSQLite3对象)。 你必须首先使用像SQLite Studio这样的工具来将数据库文件从2.1转换到3.0(大小可以降低一半),然后仔细比较SQLite和SQLite3 PHP手册页来更改必要的对象和函数调用。

如果选项 ,请注意,这不应该是一个艰苦的工作,因为变化不是那么大。 例如,到目前为止我所学到的:

  • SQLiteDatabase – > SQLite3
  • SQLiteDatabase::unbufferedQuery – > SQLite3::query
  • SQLiteResult::fetchAll(SQLITE_*) – > SQLite3Result::fetchArray(SQLITE3_*)

至于提取,在旧的SQLite我们有:

 $rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC); foreach($rowsIMEI as $r) { ... } 

而在新的SQLite3中,我们应该:

 $rowsIMEI = $db->query($imeiSQL); while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC)) { ... } 

其他的变化需要相似的工作量,所以这不应该是一个终身的过程。

当然,我强烈build议任何人前进并select第二种select。 在大多数情况下,进展是两种可用选项中较好的一种。

我有同样的问题。

如果你升级了你的php版本,一些旧的configuration文件可能引用了一个不存在的文件。

查看“conf.d”目录下的“.ini”文件。 在我的情况下,我的“conf.d”目录的path是在Debian系统中的“/etc/php5/conf.d”

具体谈到“SQLiteDatabase”类,我的问题是指向“sqlite.so” ,不存在的“sqlite.ini”文件。

删除“sqlite.ini”文件后,请确保有一个ini文件指向一个有效的sqlite扩展(在这种情况下, “sqlite3.ini”指向“sqlite3.so” ),并重新启动Apache的所有工作正常我。

希望能帮助到你。

我有同样的问题,我忘记取消扩展= p​​hp_pdo_sqlite.dll

延长= php_sqlite.dll

我有一个类似的问题,当试图安装sqlite使用“yum install sqlite.i386”它说,它已安装和最新,但由于某种原因,我的php.ini中没有什么关于它,它不工作即使phpinfo报告“与sqlite =共享”等

在php.ini中添加“extension = sqlite.so”使其工作,我把我的PDO部分放在底部附近,但是我怀疑它确实放在哪里。

哦,并确保你检查之前重新启动Apache,或只是重新启动框! 🙂

这是一个老人,但一个好东西,我刚刚被再次刺痛! 事实certificate,有安装sqlite和sqlite3的PHP扩展,你可能有后者,但在看“sqlite”扩展手册页。

我的解决scheme是运行:

 print_r(get_declared_classes()); 

并显示:

 ....... [130] => mysqli_stmt [131] => SQLite3 [132] => SQLite3Stmt [133] => SQLite3Result [134] => ImagickException ....... 

所以我的安装没有定义SQLiteDatabase类只有SQLite3。 现在参考php手册部分的sqlite3。

在Arch Linux系统上使用PHP 5.6.2版本(当前时间:Nov2014)

还请注意做到:
在/etc/php/php.ini中设置sqlite3.so扩展所在的path:

[sqlite3的]
sqlite3.extension_dir = / path / to / your / modules

我的程序安装在'/ usr / lib / php / modules'下,可以用pacman列出:

$ sudo pacman -Ql php-sqlite

其中将列出已安装的sqlite3.so扩展名和其他文件。

您可以通过查询来validationPHP是否find了扩展名:

$ php –ri sqlite3

我正在使用Adminer,正如wiki.archlinux.org中所解释的那样,在我在php.ini中设置了这个path之后,它创build了一个数据库。

感谢上面提供的信息和成功。

检查你的php.ini(例如在Windows上):

 extension=php_pdo.dll extension=php_pdo_sqlite.dll extension=php_sqlite.dll 

检查你的php.ini。 1)手动input扩展名文件的path。 Uncoment:extension_dir =“C:\ php \ ext”2)不要忘了在“Dynamic Extensions”一章中注明扩展名:extension = php_mysqli.dll extension = php_pdo_sqlite.dll extension = php_sqlite3.dll