通用的 PDO 类(1)
以下是一个通用的 PDO 类的示例代码,封装了一些常见的数据库操作功能,例如连接数据库、执行 SQL 语句、预处理、事务管理和返回异常等。建议在实际使用时根据具体情况进行适当修改和优化。
<?php
class DB {
/** @var PDO $pdo PDO链接对象 */
private $pdo;
/** @var PDOStatement $statement 执行的语句对象 */
private $statement;
/**
* 构造函数,连接数据库
*
* @param string $host 数据库主机名
* @param string $dbname 数据库名
* @param string $user 数据库用户名
* @param string $password 数据库密码
*/
public function __construct(string $host, string $dbname, string $user, string $password) {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
try {
$this->pdo = new PDO($dsn, $user, $password);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
throw new PDOException("Database connection failed: " . $e->getMessage());
}
}
/**
* 执行 SQL 语句
*
* @param string $sql SQL查询语句
* @param array $bindings 查询语句绑定参数的数组
*
* @return mixed 执行结果
*/
public function query(string $sql, array $bindings = []) {
try {
$this->statement = $this->pdo->prepare($sql);
$this->bindValues($bindings);
return $this->statement->execute();
} catch (PDOException $e) {
throw new PDOException("Query execution failed: " . $e->getMessage());
}
}
/**
* 获取所有结果集
*
* @return array 所有结果集
*/
public function fetchAll() {
return $this->statement->fetchAll();
}
/**
* 获取单行结果集
*
* @return array 单行结果集
*/
public function fetch() {
return $this->statement->fetch();
}
/**
* 获取查询结果中某个字段的值
*
* @param string $columnName 待获取字段的名称
*
* @return mixed 字段值
*/
public function fetchColumn(string $columnName) {
return $this->statement->fetchColumn($columnName);
}
/**
* 绑定参数
*
* @param array $bindings 需要绑定的参数数组
*
* @return void
*/
public function bindValues(array $bindings) {
foreach($bindings as $key => $value) {
$this->statement->bindValue(is_int($key) ? $key + 1 : $key, $value);
}
}
/**
* 开启一个新的事务
*
* @return bool 是否成功开启事务
*/
public function beginTransaction() {
return $this->pdo->beginTransaction();
}
/**
* 提交事务
*
* @return bool 是否成功提交事务
*/
public function commit() {
return $this->pdo->commit();
}
/**
* 回滚事务
*
* @return bool 是否成功回滚事务
*/
public function rollBack() {
return $this->pdo->rollBack();
}
/**
* 获取最后插入的 ID
*
* @return int 最后插入的 ID
*/
public function lastInsertId(): int {
return (int) $this->pdo->lastInsertId();
}
/**
* 返回任何异常信息
*
* @return bool|array 此方法将返回异常信息的数组,否则返回false
*/
public function errorInfo() {
return $this->pdo->errorInfo();
}
/**
* 断开数据库连接
*
* @return void
*/
public function __destruct() {
$this->pdo = null;
}
}
?>
使用示例:
<?php
// 实例化 PDO 类
$db = new DB("localhost", "mydatabase", "root", "");
// 执行查询 SQL 语句并获得结果集
$db->query("SELECT * FROM `users` WHERE `id` = :id", [":id" => 1]);
$results = $db->fetchAll();
// 执行更新 SQL 语句(事务)
try {
$db->beginTransaction();
$db->query("UPDATE `users` SET `name` = :name WHERE `id` = :id", [":name" => "Jack", ":id" => 1]);
$db->query("UPDATE `users` SET `email` = :email WHERE `id` = :id", [":email" => "jack@example.com", ":id" => 1]);
$db->commit();
} catch(PDOException $e) {
$db->rollBack();
echo "Transaction failed: " . $e->getMessage();
}
?>
文章目录
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。