php PDO

作者admin

11月 24, 2024

PDO(PHP Data Objects)是 PHP 提供的一种用于访问数据库的轻量级、通用的数据库访问抽象层。

它提供了一种统一的接口,允许 PHP 开发者使用相同的 API 访问多种类型的数据库,包括 MySQL、PostgreSQL、SQLite 等。

PDO 的一些主要特点和优势

  1. 跨数据库兼容性:PDO 支持多种数据库,可以在不同类型的数据库之间切换而无需更改代码,提高了应用的灵活性和可移植性。
  2. 预处理语句:PDO 提供了预处理语句的功能,可以有效地防止 SQL 注入攻击,并提高了 SQL 查询的效率。预处理语句还允许多次执行相同的 SQL 查询,并且可以绑定参数,提高了代码的安全性和性能。
  3. 错误处理:PDO 提供了丰富的错误处理机制,包括异常处理和错误码处理,可以方便地捕获和处理数据库操作中的错误。
  4. 面向对象的接口:PDO 提供了面向对象的接口,使得数据库操作更加直观和易于理解。通过 PDO 对象,可以轻松执行各种数据库操作,如查询、插入、更新、删除等。
  5. 预定义的数据库驱动程序:PDO 提供了一些预定义的数据库驱动程序,可以直接使用,例如 MySQL、PostgreSQL、SQLite 等。同时,也支持自定义的数据库驱动程序,允许开发者根据需要自行实现数据库驱动程序。

PDO 示例

// 数据库连接配置
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '';

try {
    // 建立数据库连接
    $pdo = new PDO($dsn, $username, $password);

    // 准备 SQL 查询语句
    $sql = 'SELECT * FROM users WHERE username = :username';

    // 创建预处理对象
    $stmt = $pdo->prepare($sql);

    // 绑定参数
    $username = 'john';
    $stmt->bindParam(':username', $username, PDO::PARAM_STR);
    // 执行查询
    $stmt->execute();

    // 处理结果
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        // 处理每一行结果
    }
} catch (PDOException $e) {
    // 捕获并处理异常
    echo '数据库连接失败:' . $e->getMessage();
}

PDO 方法

prepare

用于准备 SQL 语句的方法。它用于创建一个预处理对象,该对象可以在执行之前绑定参数,防止 SQL 注入攻击,并提高 SQL 查询的效率。

bindParam

用于绑定参数到预处理语句中,以便执行 SQL 查询时使用。

它可以将参数绑定到占位符(如 :name)或者问号占位符(如 ?)中,并指定参数的类型。

  • parameter:要绑定的参数名或者参数位置(如果是问号占位符)。
  • variable:要绑定的参数值,可以是一个变量名。
  • data_type:可选参数,指定参数的数据类型,可以是以下之一:
    • PDO::PARAM_INT:表示参数是整数类型。
    • PDO::PARAM_STR:表示参数是字符串类型。
    • PDO::PARAM_BOOL:表示参数是布尔类型。
    • PDO::PARAM_NULL:表示参数是 NULL 值。
    • PDO::PARAM_LOB:表示参数是大对象类型(如文件或图片)。

execute

执行预处理语句,并在必要时绑定参数到语句中。它执行的是预处理对象(PDOStatement 对象)中的 SQL 查询,并返回执行结果。

  • input_parameters,可选参数,用于指定要绑定到语句中的参数。通常情况下,我们会在调用 bindParam 方法时将参数绑定到预处理对象中,而不是在调用 execute 方法时传递参数。

fetch

从结果集中获取当前行的记录,并将其作为关联数组、数字索引数组或者两者兼有的形式返回,同时将结果集的指针移动到下一行。

  • fetch_style,可选参数,用于指定返回的数据格式,可以是以下之一:
    • PDO::FETCH_ASSOC:返回关联数组形式的结果,默认值。
    • PDO::FETCH_NUM:返回数字索引数组形式的结果。
    • PDO::FETCH_BOTH:返回关联数组和数字索引数组兼有的形式。
    • PDO::FETCH_OBJ:返回一个对象形式的结果。
    • PDO::FETCH_CLASS:返回一个指定类的实例形式的结果。

fetchAll

获取查询结果集中的所有行,并以指定的格式返回。

rowCount

获取查询结果集中的行数

lastInsertId

获取最后插入的记录的 ID。

setAttribute

设置 PDO 连接的属性

getAttribute

获取 PDO 连接的属性

fetch vs fetchAll

fetch 方法用于从查询结果集中获取下一行记录,并将其作为关联数组、数字索引数组或者两者兼有的形式返回。每次调用 fetch 方法都会获取结果集中的下一行记录,直到遍历完所有记录。

// 准备 SQL 查询语句
$sql = 'SELECT * FROM users';

// 创建预处理对象
$stmt = $pdo->prepare($sql);

// 执行查询
$stmt->execute();

// 获取并处理结果
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // 处理每一行记录
    var_dump($row);
}

fetchAll 方法用于获取查询结果集中的所有行,并以指定的格式返回。它将所有结果行一次性获取并返回一个二维数组,每个元素代表一行记录。

 

作者 admin

百度广告效果展示