使用 PDO 与 SQLite 数据库交互的详细教程

在 PHP 中,使用 PDO (PHP Data Objects) 进行数据库交互是一个非常推荐的做法,因为它提供了统一的接口支持多种数据库,并且具有更高的安全性和灵活性。SQLite 是一个轻量级的数据库,可以直接集成到 PHP 中,适用于小型项目或嵌入式系统。

在本教程中,我们将通过 PDO 来实现与 SQLite 数据库的交互,主要包括以下几个步骤:

1. 安装 SQLite 和 PDO 扩展

确保你的 PHP 环境中已经安装了 SQLite 和 PDO 扩展。通常,PHP 默认会支持 PDO 和 SQLite 扩展。如果没有安装,可以通过以下命令安装:

sudo apt-get install php-pdo-sqlite

或者,如果你在 Windows 上运行 PHP,确保你的 php.ini 文件中启用了相关扩展:

extension=sqlite3
extension=pdo_sqlite

2. 创建 SQLite 数据库

SQLite 数据库是一个文件,你不需要额外的数据库服务器即可使用。在开始使用 PDO 和 SQLite 之前,你需要有一个数据库文件。可以通过 SQLite 提供的命令行工具创建一个 SQLite 数据库文件,或者直接在 PHP 中创建。

例如,在 PHP 中创建一个 SQLite 数据库:

<?php
// 创建一个新的 SQLite 数据库
$database = new PDO('sqlite:/path/to/database.db');

// 检查数据库是否连接成功
if ($database) {
    echo "数据库连接成功!";
} else {
    echo "数据库连接失败!";
}
?>

如果数据库文件 /path/to/database.db 不存在,SQLite 会自动创建这个文件。

3. 连接到 SQLite 数据库

我们使用 PDO 的 sqlite: 前缀来连接 SQLite 数据库。

<?php
try {
    // 连接到 SQLite 数据库
    $pdo = new PDO('sqlite:/path/to/database.db');
    // 设置 PDO 错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "数据库连接成功!";
} catch (PDOException $e) {
    // 捕获连接错误并输出错误信息
    echo "连接失败: " . $e->getMessage();
}
?>

4. 创建数据库表

通过 PDO 执行 SQL 语句,可以创建数据库表。在 SQLite 中,我们可以使用 CREATE TABLE 来创建表。

<?php
try {
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // 创建 users 表
    $sql = "CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT NOT NULL UNIQUE,
        age INTEGER
    )";
    
    // 执行 SQL 语句
    $pdo->exec($sql);
    echo "表创建成功!";
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

此代码将创建一个名为 users 的表,其中包含 idnameemail 和 age 字段。

5. 插入数据

通过 INSERT INTO 语句向表中插入数据。为了防止 SQL 注入,我们应该使用 预处理语句

<?php
try {
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // 使用预处理语句插入数据
    $stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
    
    // 绑定参数
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':age', $age);
    
    // 插入数据
    $name = 'John Doe';
    $email = 'john@example.com';
    $age = 28;
    $stmt->execute();

    echo "数据插入成功!";
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

6. 查询数据

使用 SELECT 语句从表中查询数据。通过 PDO 可以轻松地获取查询结果。查询结果通常使用 fetch() 或 fetchAll() 方法来获取。

<?php
try {
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // 执行查询
    $stmt = $pdo->query("SELECT * FROM users");

    // 获取所有结果
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 输出查询结果
    foreach ($users as $user) {
        echo "ID: " . $user['id'] . " - Name: " . $user['name'] . " - Email: " . $user['email'] . " - Age: " . $user['age'] . "<br>";
    }
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

7. 更新数据

使用 UPDATE 语句可以修改表中的数据。与插入数据类似,建议使用预处理语句来防止 SQL 注入。

<?php
try {
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 使用预处理语句更新数据
    $stmt = $pdo->prepare("UPDATE users SET age = :age WHERE id = :id");
    
    // 绑定参数
    $stmt->bindParam(':age', $age);
    $stmt->bindParam(':id', $id);
    
    // 更新数据
    $age = 30;
    $id = 1;
    $stmt->execute();

    echo "数据更新成功!";
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

8. 删除数据

删除数据可以使用 DELETE 语句,同样建议使用预处理语句。

<?php
try {
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // 使用预处理语句删除数据
    $stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
    
    // 绑定参数
    $stmt->bindParam(':id', $id);
    
    // 删除数据
    $id = 1;
    $stmt->execute();

    echo "数据删除成功!";
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}
?>

9. 关闭数据库连接

虽然 PDO 会在脚本结束时自动关闭连接,但在某些情况下,你可能想手动关闭数据库连接。这可以通过设置 null 来关闭连接:

<?php
$pdo = null;  // 关闭数据库连接
?>

10. 完整示例:连接、操作和查询 SQLite 数据库

<?php
try {
    // 连接到 SQLite 数据库
    $pdo = new PDO('sqlite:/path/to/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 创建表
    $sql = "CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT NOT NULL UNIQUE,
        age INTEGER
    )";
    $pdo->exec($sql);

    // 插入数据
    $stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':age', $age);

    $name = 'John Doe';
    $email = 'john@example.com';
    $age = 28;
    $stmt->execute();

    // 查询数据
    $stmt = $pdo->query("SELECT * FROM users");
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($users as $user) {
        echo "ID: " . $user['id'] . " - Name: " . $user['name'] . " - Email: " . $user['email'] . " - Age: " . $user['age'] . "<br>";
    }

    // 更新数据
    $stmt = $pdo->prepare("UPDATE users SET age = :age WHERE id = :id");
    $stmt->bindParam(':age', $age);
    $stmt->bindParam(':id', $id);
    $age = 30;
    $id = 1;
    $stmt->execute();

    // 删除数据
    $stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
    $stmt->bindParam(':id', $id);
    $id = 1;
    $stmt->

execute();

} catch (PDOException $e) {
echo “错误: ” . $e->getMessage();
}

// 关闭连接
$pdo = null;
?>


### 总结

通过 PDO 连接 SQLite 数据库的步骤如下:

1. **连接数据库**:使用 `new PDO('sqlite:/path/to/database.db')` 连接数据库。
2. **执行 SQL 语句**:通过 `exec()` 或预处理语句来执行 SQL 语句。
3. **获取数据**:使用 `query()` 或 `prepare()` 与 `fetch()` 获取数据。
4. **错误处理**:通过 `try-catch` 块捕获 PDO 错误。
5. **关闭连接**:手动关闭连接或依赖 PHP 自动关闭。

通过这些步骤,你可以在 PHP 中实现与 SQLite 数据库的交互,并进行增、删、改、查等操作。