Php

為什麼在 /var/www/*.php 中找不到類“SQLiteDatabase”?

  • February 27, 2019

我正在嘗試使用 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”。因此,除非“–disable-sqlite”,否則應該啟用 sqlite。在我的例子中輸出“phpinfo();” 根本不包含“sqlite”。

Google上有不少關於同一問題的報告,但沒有明確的解決方案。

仔細檢查您的 SQLlite 擴展是否已在 PHP 中啟用,並且您應該能夠使用 sqlite_* 系列函式(例如 sqlite_open)而不是 OOP 方法,我知道這並不理想。

還只需檢查您的用於 sqlite 的 PECL 模組是否 >= 1.0.0。

ClassSQLiteDatabasesqlite庫中的一個對象,該支持在 PHP 5.4 中被刪除,但在早期版本中可以禁用各種系統和配置,因為該庫長期以來被標記為將被棄用

較新版本的 PHP 不再支持庫php_sqlite.dll(Windows) 或(Linux),並分別替換為或。php_sqlite.so``php_sqlite3.dll``php_sqlite3.so

你可以:

  1. 嘗試在 Internet 的某個地方找到php_sqlite.dll( )。php_sqlite.so這樣這樣的連結可能對你有幫助。但是,您必須仔細地將舊的 SQLite 庫文件與您的 PHP 平台(x64x86)、建構引擎(VC6VC9VC11、版本(5.x)和類型(執行緒安全或非執行緒安全TS)進行匹配。這可能是一項艱鉅的任務。NTS
  2. php_sqlite.dll( SQLiteDatabase) 拋在後面,然後運往新的php_sqlite3.dll(SQLite3對象)。您必須首先使用SQLite Studio之類的工具將數據庫文件從 2.1 轉換為 3.0(大小甚至可以降低一半),然後仔細比較SQLiteSQLite3 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))
{
   ...
}

其他更改需要類似的工作量,因此這不應該是一個終身過程。

當然,我強烈建議任何人繼續前進並選擇第二個選項。在大多數情況下,進步是兩個可用選項中較好的一個。

引用自:https://serverfault.com/questions/117610