PHP:PDO 操作 SQLite3 数据库

在 PHP 中,可以使用 PDO(PHP Data Objects)来操作 SQLite3 数据库。以下是详细的步骤和示例:

一、连接到 SQLite3 数据库

1. 使用 PDO 的构造函数来创建连接。连接字符串的格式为sqlite:数据库文件名。

try {

$pdo = new PDO('sqlite:my_database.db');

echo "Connected to SQLite database successfully.";

} catch (PDOException $e) {

echo "Connection failed: ". $e->getMessage();

}

二、执行查询操作

1. 查询数据:

使用query()方法执行 SQL 查询语句,并返回一个PDOStatement对象。可以使用fetch()或fetchAll()方法从结果集中获取数据。

$stmt = $pdo->query('SELECT * FROM users');

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($results) {

foreach ($results as $row) {

echo "ID: ". $row['id']. ", Name: ". $row['name']. "<br>";

}

} else {

echo "No results found.";

}

2. 插入数据:

使用prepare()和execute()方法来插入数据。可以使用占位符(如?或命名参数)来传递参数。

$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':name', $name);

$stmt->bindParam(':email', $email);

$name = "John Doe";

$email = "john@example.com";

$stmt->execute();

echo "New record inserted successfully.";

3. 更新数据:

类似插入数据,使用prepare()和execute()方法更新数据。

$sql = "UPDATE users SET email = :newEmail WHERE id = :id";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':newEmail', $newEmail);

$stmt->bindParam(':id', $id);

$newEmail = "updated_email@example.com";

$id = 1;

$stmt->execute();

echo "Record updated successfully.";

4. 删除数据:

使用prepare()和execute()方法删除数据。

$sql = "DELETE FROM users WHERE id = :id";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':id', $id);

$id = 1;

$stmt->execute();

echo "Record deleted successfully.";

三、预处理语句和参数绑定

1. 防止 SQL 注入:

PDO 的预处理语句可以有效地防止 SQL 注入攻击。通过将 SQL 语句和参数分开处理,确保参数的值不会被解释为 SQL 代码。

例如,使用占位符?进行参数绑定:

$sql = "INSERT INTO users (name, email) VALUES (?,?)";

$stmt = $pdo->prepare($sql);

$stmt->execute([$name, $email]);

或者使用命名参数进行参数绑定:

$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':name', $name);

$stmt->bindParam(':email', $email);

$stmt->execute();

四、错误处理

1. 异常处理:

PDO 默认使用异常来处理错误。可以使用try-catch块来捕获数据库操作中的异常。

try {

$sql = "SELECT * FROM non_existent_table";

$stmt = $pdo->query($sql);

} catch (PDOException $e) {

echo "Error: ". $e->getMessage();

}

五、事务处理

1. 开启事务:

使用beginTransaction()方法开启一个事务。在事务中,可以执行多个数据库操作,如果其中一个操作失败,可以回滚到事务开始之前的状态。

try {

$pdo->beginTransaction();

// 执行多个数据库操作

$sql1 = "INSERT INTO table1 (column1, column2) VALUES (?,?)";

$stmt1 = $pdo->prepare($sql1);

$stmt1->execute([$value1, $value2]);

$sql2 = "UPDATE table2 SET column3 =? WHERE id =?";

$stmt2 = $pdo->prepare($sql2);

$stmt2->execute([$newValue, $id]);

// 提交事务

$pdo->commit();

echo "Transaction completed successfully.";

} catch (PDOException $e) {

// 回滚事务

$pdo->rollBack();

echo "Error: ". $e->getMessage();

}

使用 PDO 操作 SQLite3 数据库可以提供更安全、高效和可移植的方式来处理数据。通过正确使用连接、查询、预处理语句、错误处理和事务处理,可以确保你的 PHP 应用程序与 SQLite3 数据库的交互更加稳定和可靠。

PHP编程语言基础