我正在尝试从 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 吗?
附言 这里我发现“从 PHP 5.0 开始,标准 Linux PHP 编译默认启用 SQLite 支持。”并且我的 PHP 版本是“5.2.6-2ubuntu4.6”。因此,除非使用“--disable-sqlite”,否则应该启用 sqlite。在我的情况下,“phpinfo();”的输出根本不包含“sqlite”。
答案1
Google 上有很多关于同一问题的报告,但没有明确的解决方案。
仔细检查您的 SQLlite 扩展是否在 PHP 中启用,并且您应该能够使用 sqlite_* 系列函数(例如 sqlite_open)而不是 OOP 方法,我知道这并不理想。
另请检查 sqlite 的 PECL 模块是否 >= 1.0.0。
答案2
类SQLiteDatabase
是来自的一个对象sqlite库,该库在 PHP 5.4 中被放弃支持,但在早期版本中,各种系统和配置都可以禁用该库,因为该库长期以来被标记为将被弃用。
库php_sqlite.dll
(Windows)或php_sqlite.so
(Linux)不再受 PHP 较新版本的支持,并分别被php_sqlite3.dll
或取代php_sqlite3.so
。
你可以:
尝试在互联网上找到
php_sqlite.dll
( )。类似以下链接php_sqlite.so
这或者这可能对您有帮助。但是,您必须仔细将旧的 SQLite 库文件与您的 PHP 平台(x64
或x86
)、构建引擎(VC6
,VC9
或VC11
)、版本(5.x
)和类型(TS
例如线程安全或NTS
非线程安全)这或许是一个艰巨的任务。留下
php_sqlite.dll
(SQLiteDatabase
)并运送到新的php_sqlite3.dll
(SQLite3
对象)。您必须首先使用类似SQLite 工作室将数据库文件从 2.1 转换为 3.0(大小可以缩小一半),然后仔细比较SQLite和SQLite3PHP 手册页更改必要的对象和函数调用。
如果选项二请注意,这应该不是一件难事,因为变化并不大。例如,到目前为止我了解到的内容:
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))
{
...
}
其他变化也需要类似量的工作,所以这不应该是一个终生的过程。
当然,我强烈建议大家继续选择第二选项。在大多数情况下,进步是两个可用选项中更好的一个。
答案3
我有同样的问题。
如果您升级了 php 版本,一些旧的配置文件可能会引用不存在的文件。
看着那(这“.ini”文件位于“conf.d”目录。在我的例子中,我的“conf.d”目录是“/etc/php5/conf.d”在 Debian 系统中。
具体谈论“SQLite数据库”课堂上,我的问题是“sqlite.ini”文件指向“sqlite.so”但它并不存在。
删除后“sqlite.ini”文件,请确保有一个 ini 文件指向有效的 sqlite 扩展(在本例中为“sqlite3.ini”指向“sqlite3.so”) 并重新启动 apache 对我来说一切正常。
希望能帮助到你。
答案4
我遇到了类似的问题,当尝试使用“yum install sqlite.i386”安装 sqlite 时,它说它已安装并且是最新的,但是由于某种原因,我的 php.ini 中没有任何关于它的内容,并且它无法工作,即使 phpinfo 报告“with sqlite=shared”等。
在 php.ini 的某个地方添加“extension=sqlite.so”使其工作,我将其放在靠近底部的 PDO 部分下,但我怀疑将它放在哪里并不重要。
哦,请确保在检查之前重新启动 apache,或者直接重新启动盒子!:)