PHP:数据库操作(PDO)

在 PHP 中,PDO(PHP Data Objects)是一个用于访问数据库的轻量级、一致的接口。

一、连接数据库

1. 创建连接:

使用new PDO()来创建一个数据库连接对象。连接字符串通常包含数据库类型、主机名、数据库名、用户名和密码等信息。

例如,连接到 MySQL 数据库:

try {
    $conn = new PDO("mysql:host=localhost;dbname=your_database_name", "your_username", "your_password");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: ". $e->getMessage();
}

二、执行查询

1. 查询数据:

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

$sql = "SELECT * FROM users";
$stmt = $conn->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($result) > 0) {
    foreach ($result as $row) {
        echo "id: ". $row["id"]. " - Name: ". $row["name"]. "<br>";
    }
} else {
    echo "0 results";
}

2. 插入数据:

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

$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$name = "John Doe";
$email = "john@example.com";
$stmt->execute();
echo "New record created successfully";

3. 更新数据:

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

$sql = "UPDATE users SET email = :newEmail WHERE id = :id";
$stmt = $conn->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 = $conn->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 = $conn->prepare($sql);
$stmt->execute([$name, $email]);

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

$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$stmt->execute();

四、错误处理

1. 异常处理:

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

try {
    $sql = "SELECT * FROM non_existent_table";
    $stmt = $conn->query($sql);
} catch(PDOException $e) {
    echo "Error: ". $e->getMessage();
}

五、事务处理

1. 开启事务:

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

try {
    $conn->beginTransaction();
    // 执行多个数据库操作
    $sql1 = "INSERT INTO table1 (column1, column2) VALUES (?,?)";
    $stmt1 = $conn->prepare($sql1);
    $stmt1->execute([$value1, $value2]);
    $sql2 = "UPDATE table2 SET column3 =? WHERE id =?";
    $stmt2 = $conn->prepare($sql2);
    $stmt2->execute([$newValue, $id]);
    // 提交事务
    $conn->commit();
    echo "Transaction completed successfully";
} catch(PDOException $e) {
    // 回滚事务
    $conn->rollBack();
    echo "Error: ". $e->getMessage();
}

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

PHP编程语言基础