PHP PDO


PDO是什么

PDO全称为PHP Data Objects,是PHP标准库中的一个扩展组件,可以方便地实现与数据库的交互。通过PDO扩展,PHP可以支持18种不同类型的数据库,并对每种数据库都提供了不同程度的支持。

为什么要使用PDO

传统的PHP数据库交互方式,往往采用mysql_函数或mysqli_函数,这种方式虽然易于上手,但是存在一些严重的问题:首先,这些函数只支持MySQL数据库,当需要切换数据库时,需要核对函数名和参数;其次,这些函数对数据的传输、安全性、语言特性以及错误处理等方面的支持都不足。而PDO提供了更加规范和安全的数据交互方式,可以让我们专注于业务逻辑的开发,从而提高效率和可靠性。

如何使用PDO

使用PDO,我们需要以下几个步骤:

Step1. 连接数据库

我们可以使用PDO的PDO()方法创建一个新的PDO实例,以Bluehost为例:

try {
    $dsn = 'mysql:host=hostname;dbname=database_name;charset=utf8mb4';
    $username = 'user_name';
    $password = 'password';

    // 创建PDO实例
    $pdo = new PDO($dsn, $username, $password);
} catch(PDOException $e) {
    // 处理异常
    echo 'Connection failed: ' . $e->getMessage();
}

在创建PDO实例时,我们需要传递四个参数:

  • dsn:包含数据库名称和其它参数的字符串,常用的参数包括host、port、dbname、charset等。

  • username:登录数据库的用户名。

  • password:登录数据库的密码。

  • options:可选参数,可以设置一些PDO的属性,如下面例子中的PDO::ATTR_ERRMODE指定了PDO在出错时抛出异常。

Step2. 执行SQL语句

PDO支持执行各种SQL语句,如SELECT、INSERT、UPDATE和DELETE等。我们可以使用PDO的query()方法执行SELECT语句,或是exec()方法执行INSERT、UPDATE和DELETE语句。

// 查询
$stmt = $pdo->query('SELECT name, email FROM users');
while ($row = $stmt->fetch()) {
    echo $row['name'] . ' : ' . $row['email'] . '<br />';
}

// 插入
$count = $pdo->exec("INSERT INTO users (name, email) VALUES ('John', 'john@example.com')");
echo "Inserted $count rows.";

Step3. 预处理语句

PDO还提供了非常方便的预处理语句的功能,使得SQL语句和参数可分离,避免注入式攻击。以下是一个简单的例子:

// 预处理语句
$stmt = $pdo->prepare('SELECT name, email FROM users WHERE id = :id');
$stmt->execute(array(':id' => $id));

// 遍历结果集
while ($row = $stmt->fetch()) {
    echo $row['name'] . ' : ' . $row['email'] . '<br />';
}

在上述代码中,我们使用PDO的prepare()方法准备SQL语句,然后将占位符:id与实际数据进行绑定,并通过execute()方法将绑定数据传递给SQL语句。这样做可以有效地防范SQL注入攻击。

总结

PDO是PHP的一个强大的数据库交互工具,可以支持多种不同类型的数据库,并且提供了各种安全、规范和方便的功能。对于需要频繁与数据库交互的Web应用程序来说,使用PDO会大大提高开发效率和代码的可靠性。