php实现pdo数据库操作类过程详解(php查询数据库并输出实例)快来看

随心笔谈3年前发布 admin
213 0 0

文章摘要

这篇文章介绍了一个PHP类`Db`,用于管理数据库连接和操作。该类具有以下主要特点: 1. **静态属性`dbConfig`**:存储了数据库连接的配置参数,包括数据库类型、主机、端口、用户名、密码、字符集和默认数据库等。 2. **构造函数**:`__construct`方法初始化数据库连接,使用`$params`参数动态更新配置参数,并调用`connect()`方法连接数据库。 3. **静态方法`getInstance`**:实现了单例模式,确保只有一个实例可以在不同地方使用,当实例不存在时会创建新实例。 4. **`connect()`方法**:生成连接字符串,创建PDO对象并设置字符集。如果连接失败,会抛出错误信息。 5. **执行方法**:包含`exec`(执行SQL语句并返回受影响记录数)、`fetch`(获取单条查询结果)和`fetchAll`(获取多条查询结果)。 文章整体介绍了该类的核心功能和用途,适合用于数据库操作和管理的场景。

<?php

class Db
{
// 数据库的默认连接参数
private $dbConfig=[
‘db’=>’mysql’, // 数据库类型
‘host’=>’localhost’, // 主机名称
‘port’=>’3306’, // 默认端口
‘user’=>’root’, // 用户名
‘pass’=>’root’, // 密码
‘charset’=>’utf8’, // 默认字符集
‘dbname’=>’edu’, // 默认数据库
];
// 新增主键id
public $insertId=null;
// 受影响的记录
public $num=0;
// 单例模式,本类的实例
private static $instance=null;
// 数据库的连接
private $conn=null;

private function __construct($params=[])
{
// 初始化连接参数
$this->dbConfig=array_merge($this->dbConfig,$params);
// 连接数据库
$this->connect();
}

private function __clone()
{
// TODO:Implement __clone() method.
}

public static function getInstance($params=[])
{
if (!self::$instance instanceof self) {
self::$instance=new self($params);
}
return self::$instance;
}
private function connect()
{
try{
// 配置数据源DSN
$dsn=”{$this->dbConfig[‘db’]}:host={$this->dbConfig[‘host’]};port={$this->dbConfig[‘port’]};dbname={$this->dbConfig[‘dbname’]};charset={$this->dbConfig[‘charset’]}”;
// 创建PDO对象
$this->conn=new PDO($dsn,$this->dbConfig[‘user’],$this->dbConfig[‘pass’]);
// 设置客户端字符集
$this->conn->query(“SET NAMES {$this->dbConfig[‘charset’]}”);
}catch (PDOException $e){
die(‘数据库连接失败’.$e->getMessage());
}
}

public function exec($sql)
{
$num=$this->conn->exec($sql);
// 如果有受影响的记录
if($num > 0){
// 如果是新增操作,初始化新增主键id属性
if(null !==$this->conn->lastInsertId()){
$this->insertId=$this->conn->lastInsertId();
}
$this->num=$num; // 返回受影响的记录
}else{
$error=$this->conn->errorInfo(); // 获取最后操作错误信息的数组
var_dump($error);
}
}
// 获取单条查询结果
public function fetch($sql)
{
return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);
}
// 获取多条查询结果
public function fetchAll($sql)
{
return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
}
?>

© 版权声明

相关文章