為什麼在 /var/www/*.php 中找不到類“SQLiteDatabase”?
我正在嘗試使用 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。
Class
SQLiteDatabase
是sqlite庫中的一個對象,該支持在 PHP 5.4 中被刪除,但在早期版本中可以禁用各種系統和配置,因為該庫長期以來被標記為將被棄用。較新版本的 PHP 不再支持庫
php_sqlite.dll
(Windows) 或(Linux),並分別替換為或。php_sqlite.so``php_sqlite3.dll``php_sqlite3.so
你可以:
- 嘗試在 Internet 的某個地方找到
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 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)) { ... }
其他更改需要類似的工作量,因此這不應該是一個終身過程。
當然,我強烈建議任何人繼續前進並選擇第二個選項。在大多數情況下,進步是兩個可用選項中較好的一個。