升级后 SQLite 停止工作

升级后 SQLite 停止工作

与你们许多人一样,本周我从 Lucid 升级到了 Precise,几乎一切似乎都运行正常。

除了…SQLite 之外的一切,它之前运行良好,但现在不行了。

我检查了所有内容:phpinfo()、php.ini、sqlite3.ini。

sqlite命令运行良好,但是当我尝试使用 PHP... *PLOP* 时,什么都不起作用。

我明白了

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test/sqlite/index.php on line 4

4号线

$db = new SQLiteDatabase('test.sqlite', 0666);

有什么提示吗?


编辑

您可以在这里看到我的 phpinfo():http://pastebin.com/jQ7Bz0GN

Apache 日志是

 * Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

答案1

扩展

根据特定供应商的数据库扩展PHP 网站上有两个页面SQLite扩展:

SQLite3扩展是SQLite, 哪个很快就会过时

从 PHP 5.0 开始,SQLite 扩展默认启用。
从 PHP 5.4 开始,SQLite 扩展仅可通过 PECL 使用。

Ubuntu 10.04 与 12.04

现在,介绍一些实用知识。让我们看一下使用以下方法安装的默认 Web 服务器配置:

sudo apt-get install apache2 php5 php5-sqlite

Ubuntu 10.04:

# php --ri sqlite

SQLite

SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22

Ubuntu 12.04:

# php --ri sqlite

Extension 'sqlite' not present.

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.7.9

因此,Ubuntu 12.04 默认 PHP 安装(截至撰写本文时 - 版本 5.3.10)已经没有sqlite内置扩展。上面的输出表明只sqlite3存在来自php5-sqlite包的扩展。

解决方案

选择你的邪恶:

  1. 从长远来看,正确的方法是调整代码,使其在SQLite3。这些变化很小,但这可能会涉及对大量文件进行一些不必要的复制粘贴式工作。如果是这种情况,正确的在这里不是一个正确的词,解决方案 2 适合您。
  2. 安装过时的扩展来自正极致发光二极管

答案2

下列的安德烈斯·卡伊尼科夫斯' 回答并强烈建议您升级代码,这里有一些从类迁移时应该做哪些工作的例子SQLiteDatabasesqlite库)到SQLite3类(SQLite3图书馆)。

例如:

  • 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))
{
    ...
}

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

在开始之前,你必须先使用类似的工具SQLite 工作室将数据库文件从 2.1 转换为 3.0。大小甚至可以减小一半,所以我认为这是值得争取的。

答案3

解决方案不是用于生产,仅供玩耍):
1. 从 ubuntu11.04 或任何其他系统获取“php5-sqlite”deb 文件
2. 解压并找到文件 sqlite.so
-- 您可以通过其他方式获取 sqlite.so,例如从您的旧系统获取 --
3. 将 sqlite.so 放入 /usr/lib/php5/20090626+lfs/
4. 将其添加到 php.ini(/etc/php5/apache2/php.ini):

extension=sqlite.so

相关内容