PHP SQLite是一種可嵌入的關系型數據庫,沒有服務器端,可以在本地使用。
當我們運行本地網站或將網站部署到共享主機時,SQLite可以作為一種輕量級數據庫進行使用。對于一些小型項目,SQLite 是一種非常好的數據庫選擇。
在開發中,我們可以通過PHP來實現SQLite的連接、執行sql語句、查詢等操作。相對于其他數據庫來說,SQLite有著不同的語法處理方式以及一些注意點,下文將從以下幾個方面來介紹。
連接SQLite數據庫
要連接SQLite數據庫,我們首先需要確保PHP的SQLite擴展已經安裝并啟用了。然后使用PDO連接SQLite:
<?php try { $pdo = new PDO("sqlite:/path/to/database.db"); } catch (PDOException $e) { echo $e->getMessage(); exit(); } ?>
當SQLite文件不存在或沒有權限訪問時,PDO構造函數會拋出異常,需要使用try catch塊進行捕捉。
使用SQLite中文
SQLite中文問題較為復雜,要想讓SQLite正常使用中文,需要在建表時將數據類型改為“TEXT”,它將自動處理編碼問題。如下:
<?php $pdo->exec(" CREATE TABLE test ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER )"); ?>
這里的“name”字段使用TEXT類型,而不是其他數據庫中常用的VARCHAR或CHAR。但當我們希望在WHERE子句中使用中文時,需要開啟PRAGMA UNICODE。
<?php $pdo->exec("PRAGMA UNICODE = ON"); $stmt = $pdo->prepare("SELECT * FROM test WHERE name = ?"); $stmt->execute(["張三"]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
需要注意的是,SQLite對LIKE語句中的中文模糊查詢支持不夠完善,有時候需要手動轉換編碼。
使用SQLite全文檢索
SQLite支持全文檢索,我們可以使用Fts5全文搜索模塊,它可以為一個數據表創建虛擬表,對其中的文本內容進行快速檢索。
Fts5的一個簡單示例,對“content”字段進行全文搜索:
<?php $pdo->exec(" CREATE VIRTUAL TABLE test_fts USING fts5( id, name, age, content UNINDEXED -- unindexed表示content字段將不會生成索引文件 ) "); $pdo->exec(" INSERT INTO test_fts(id, name, age, content) SELECT id, name, age, description || '\n' || tag FROM test "); $stmt = $pdo->prepare(" SELECT * FROM test_fts WHERE content MATCH ? "); $stmt->execute(["Lisp OR Ruby"]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
Fts5要求SQLite版本不低于3.22.0,而且需要安裝fts5模塊。如果你的服務器版本過低或沒有安裝該模塊,需要升級或重裝。
使用SQLite3類庫
除了使用PDO,我們還可以使用PHP中預置的SQLite3擴展來連接SQLite數據庫。
<?php $database = new SQLite3("/path/to/database.db"); $results = $database->query("SELECT * FROM test"); while ($row = $results->fetchArray()) { echo "{$row['name']}:{$row['age']}\n"; } $database->close(); ?>
SQLite3提供了查詢結果的fetchArray、fetchObject和fetchAssoc等方便的方法,使用起來非常簡單。
結束語
以上就是PHP SQLite中文使用的一些注意事項和操作方式,如果您在使用SQLite過程中遇到了問題,可以通過官方文檔、Google或Stack Overflow尋求幫助。嘗試多次實踐不同的方法,提高自己的使用經驗。