php实现pdo数据库操作类过程详解

  • Post category:PHP

以下是“PHP实现PDO数据库操作类过程详解”的完整使用攻略,包括类的设计、方法的实现等内容。

类的设计

在PHP中,我们可以使用PDO扩展来连接和操作数据库。为了方便使用,我们可以设计一个PDO数据库操作类,封装常用的数据库操作方法。以下是一个示例,演示如何设计一个简单的PDO数据库操作类:

class DB {
  private $pdo;

  public function __construct($dsn, $username, $password) {
    $this->pdo = new PDO($dsn, $username, $password);
    $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }

  public function query($sql, $params = []) {
    $stmt = $this->pdo->prepare($sql);
    $stmt->execute($params);
    return $stmt;
  }

  public function fetchAll($sql, $params = []) {
    $stmt = $this->query($sql, $params);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
  }

  public function fetch($sql, $params = []) {
    $stmt = $this->query($sql, $params);
    return $stmt->fetch(PDO::FETCH_ASSOC);
  }

  public function insert($table, $data) {
    $keys = array_keys($data);
    $values = array_values($data);
    $sql = 'INSERT INTO ' . $table . ' (' . implode(',', $keys) . ') VALUES (' . implode(',', array_fill(0, count($values), '?')) . ')';
    $this->query($sql, $values);
    return $this->pdo->lastInsertId();
  }

  public function update($table, $data, $where) {
    $set = [];
    $values = [];
    foreach ($data as $key => $value) {
      $set[] = $key . ' = ?';
      $values[] = $value;
    }
    $sql = 'UPDATE ' . $table . ' SET ' . implode(',', $set) . ' WHERE ' . $where;
    $this->query($sql, $values);
  }

  public function delete($table, $where) {
    $sql = 'DELETE FROM ' . $table . ' WHERE ' . $where;
    $this->query($sql);
  }
}

在上述示例中,我们设计了一个名为DB的PDO数据库操作类,包含以下方法:

  • __construct:构造函数,用于连接数据库。
  • query:执行SQL语句,返回PDOStatement对象。
  • fetchAll:执行SQL语句,返回所有结果集。
  • fetch:执行SQL语句,返回第一行结果集。
  • insert:插入数据,返回插入的ID。
  • update:更新数据。
  • delete:删除数据。

方法的实现

在PDO数据库操作类中,我们需要实现以下方法:

  • __construct:使用PDO连接数据库。
  • query:使用PDO预处理语句执行SQL语句。
  • fetchAll:使用query方法执行SQL语句,并返回所有结果集。
  • fetch:使用query方法执行SQL语句,并返回第一行结果集。
  • insert:使用query方法执行插入语句,并返回插入的ID。
  • update:使用query方法执行更新语句。
  • delete:使用query方法执行删除语句。

以下是一个示例,演示如何实现这些方法:

__construct

public function __construct($dsn, $username, $password) {
  $this->pdo = new PDO($dsn, $username, $password);
  $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

在上述示例中,我们使用PDO构造函数连接数据库,并设置错误模式为异常模式。

query

public function query($sql, $params = []) {
  $stmt = $this->pdo->prepare($sql);
  $stmt->execute($params);
  return $stmt;
}

在上述示例中,我们使用PDO预处理语句执行SQL语句,并返回PDOStatement对象。

fetchAll

public function fetchAll($sql, $params = []) {
  $stmt = $this->query($sql, $params);
  return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

在上述示例中,我们使用query方法执行SQL语句,并返回所有结果集。

fetch

public function fetch($sql, $params = []) {
  $stmt = $this->query($sql, $params);
  return $stmt->fetch(PDO::FETCH_ASSOC);
}

在上述示例中,我们使用query方法执行SQL语句,并返回第一行结果集。

insert

public function insert($table, $data) {
  $keys = array_keys($data);
  $values = array_values($data);
  $sql = 'INSERT INTO ' . $table . ' (' . implode(',', $keys) . ') VALUES (' . implode(',', array_fill(0, count($values), '?')) . ')';
  $this->query($sql, $values);
  return $this->pdo->lastInsertId();
}

在上述示例中,我们使用query方法执行插入语句,并返回插入的ID。

update

public function update($table, $data, $where) {
  $set = [];
  $values = [];
  foreach ($data as $key => $value) {
    $set[] = $key . ' = ?';
    $values[] = $value;
  }
  $sql = 'UPDATE ' . $table . ' SET ' . implode(',', $set) . ' WHERE ' . $where;
  $this->query($sql, $values);
}

在上述示例中,我们使用query方法执行更新语句。

delete

public function delete($table, $where) {
  $sql = 'DELETE FROM ' . $table . ' WHERE ' . $where;
  $this->query($sql);
}

在上述示例中,我们使用query方法执行删除语句。

示例说明

示例一:查询

以下是一个示例,演示如何查询:

$db = new DB('mysql:host=localhost;dbname=test', 'root', '');

// 查询所有用户
$users = $db->fetchAll('SELECT * FROM users');
foreach ($users as $user) {
  echo $user['username'] . '<br>';
}

// 查询单个用户
$user = $db->fetch('SELECT * FROM users WHERE id = ?', [1]);
echo $user['username'];

在上述示例中,我们首先创建一个DB对象,并使用fetchAll方法查询所有用户信息,并使用foreach循环遍历所有用户信息。然后,我们使用fetch方法查询单个用户信息,并输出用户名。

示例二:插入

以下是一个示例,演示如何插入:

$db = new DB('mysql:host=localhost;dbname=test', 'root', '');

// 插入一条用户信息
$id = $db->insert('users', [
  'username' => 'admin',
  'password' => '123456',
  'email' => 'admin@example.com'
]);
echo $id;

在上述示例中,我们首先创建一个DB对象,并使用insert方法插入一条用户信息,并输出插入的ID。