首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP SQLite 資料庫 CRUD 完整實作範例

     編輯:PHP 相關知識

PHP SQLite 資料庫操作完整指南

SQLite 是輕量級嵌入式資料庫,無需獨立伺服器進程,PHP 內建 PDO 支援,適合中小型應用、行動裝置、桌面應用、測試環境等場景。本文提供完整的建表、增刪改查 (CRUD) 實作範例。

核心操作類別實作

<?php
class SQLiteManager {
  private $db;
  private $table_name = 'users';

  public function __construct($db_path) {
    try {
      $this->db = new PDO("sqlite:$db_path");
      $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
      die("資料庫連線失敗: " . $e->getMessage());
    }
  }

  // 建立資料表
  public function createTable() {
    $sql = "CREATE TABLE IF NOT EXISTS {$this->table_name} (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name VARCHAR(100) NOT NULL,
      age INTEGER,
      email VARCHAR(150),
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    )";
    try {
      $this->db->exec($sql);
      return true;
    } catch (PDOException $e) {
      error_log("建表失敗: " . $e->getMessage());
      return false;
    }
  }

  // 新增資料
  public function addData($name, $age, $email) {
    $sql = "INSERT INTO {$this->table_name} (name, age, email) VALUES (?, ?, ?)";
    try {
      $stmt = $this->db->prepare($sql);
      $stmt->execute([$name, $age, $email]);
      return $this->db->lastInsertId();
    } catch (PDOException $e) {
      error_log("新增失敗: " . $e->getMessage());
      return false;
    }
  }

  // 修改資料
  public function updateData($id, $data) {
    $fields = [];
    $values = [];
    foreach ($data as $key => $value) {
      $fields[] = "$key = ?";
      $values[] = $value;
    }
    $values[] = $id;
    
    $sql = "UPDATE {$this->table_name} SET " . implode(', ', $fields) . " WHERE id = ?";
    try {
      $stmt = $this->db->prepare($sql);
      $stmt->execute($values);
      return $stmt->rowCount() > 0;
    } catch (PDOException $e) {
      error_log("修改失敗: " . $e->getMessage());
      return false;
    }
  }

  // 刪除資料
  public function deleteData($id) {
    $sql = "DELETE FROM {$this->table_name} WHERE id = ?";
    try {
      $stmt = $this->db->prepare($sql);
      $stmt->execute([$id]);
      return $stmt->rowCount() > 0;
    } catch (PDOException $e) {
      error_log("刪除失敗: " . $e->getMessage());
      return false;
    }
  }

  // 查詢單筆
  public function getById($id) {
    $stmt = $this->db->prepare("SELECT * FROM {$this->table_name} WHERE id = ?");
    $stmt->execute([$id]);
    return $stmt->fetch();
  }

  // 查詢所有 (支援分頁)
  public function getAll($page = 1, $pageSize = 20) {
    $offset = ($page - 1) * $pageSize;
    $stmt = $this->db->prepare("SELECT * FROM {$this->table_name} ORDER BY id DESC LIMIT ? OFFSET ?");
    $stmt->execute([$pageSize, $offset]);
    return $stmt->fetchAll();
  }

  // 取得總筆數
  public function getTotalCount() {
    $stmt = $this->db->query("SELECT COUNT(*) FROM {$this->table_name}");
    return $stmt->fetchColumn();
  }
}

// 使用範例
$db = new SQLiteManager(__DIR__ . '/data/app.db');
$db->createTable();

// 新增
$id = $db->addData('張三', 25, 'zhangsan@example.com');
echo "新增成功,ID: $id\n";

// 查詢
$user = $db->getById($id);
print_r($user);

// 修改
$db->updateData($id, ['age' => 26, 'email' => 'zhangsan_new@example.com']);

// 列表
$users = $db->getAll(1, 10);
foreach ($users as $u) {
  echo "{$u['id']}: {$u['name']}, {$u['age']}歲\n";
}

// 刪除
$db->deleteData($id);
?>

SQLite 特有優勢與注意事項

特性說明
零設定無需安裝、設定伺服器,單一檔案即為完整資料庫
跨平台資料庫檔案可在 Windows/Linux/macOS 間直接複製使用
ACID 交易完整支援交易處理,保證資料一致性
型別彈性採用動態型別系統,欄位可儲存任意型別資料
並發限制寫入時鎖定整個資料庫檔案,高併發寫入效能較差
無網路存取本機檔案存取,需搭配應用層實現網路存取

效能優化建議

  • 使用交易:批次寫入時包裝在 BEGIN TRANSACTION ... COMMIT 中
  • 建立索引:常用查詢欄位加上 CREATE INDEX
  • WAL 模式:啟用 PRAGMA journal_mode=WAL 提升並發讀寫效能
  • 連線重用:避免頻繁開關連線,使用單例或連線池
  • 參數化查詢:預處理語句避免重複編譯,防止 SQL 注入

適用場景建議

  • ✅ 行動應用本地儲存
  • ✅ 桌面應用內建資料庫
  • ✅ 中小型網站 (日 PV < 10萬)
  • ✅ 開發/測試環境快速部署
  • ✅ 資料分析暫存、ETL 中間層
  • ❌ 高併發寫入 Web 應用
  • ❌ 大型企業級應用
  • ❌ 需要多伺服器共享資料庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved