单例模式PDO
来源:互联网 发布:阿里备案域名交易 编辑:程序博客网 时间:2024/05/19 16:22
封装数据库操作类,通过PDO
单例模式PDO
1)调用单例模式切换数据库
2)获取一条/多条数据(注:可动态配置数组数据)
3)执行数据操作语句
4)返回插入的记录生成的ID编号
<?php
/**
* 单例模式(三私一公)
* 类名 MysqlPDO 类名
* 私有属性 $instance 保存实例 (静态)
* 私有方法 __clone 禁克隆
* 私有构造 __construct 禁实例
* 公有方法 getInstance 负责返回当前实例 (静态)
*/
class MysqlPDO
{
private$host; //服务器IP地址
private$username; //用户名
private$password; //密码
private$port; //端口号
private$dbname; //数据库
private$charset; //字符串
/**
* @varobject 保存PDO实例
*/
private$pdo;
/**
* @varobject 保存当前类实例
*/
privatestatic $instance;
/**
* 禁止克隆
*/
privatefunction __clone()
{
}
/**
* 禁止实例化
*/
privatefunction __construct($param)
{
$this->initParam($param);
$this->initPDO();
}
/**
* 参数初始化
* @param$param 数据库信息
*/
privatefunction initParam($param)
{
$this->host = isset($param['host']) ? $param['host'] : '127.0.0.1';
$this->username = isset($param['username']) ? $param['username'] :'root';
$this->password = isset($param['password']) ? $param['password'] :'';
$this->port = isset($param['port']) ? $param['port'] : '3306';
$this->dbname = isset($param['dbname']) ? $param['dbname'] : 'test';
$this->charset = isset($param['charset']) ? $param['charset'] :'utf8';
}
/**
* PDO初始化
*/
privatefunction initPDO()
{
try {
$dsn ="mysql:host={$this->host};dbname={$this->dbname};port={$this->port};charset={$this->charset}";
$pdo = new PDO($dsn, $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
}catch (PDOException $ex) {
echo '获取错误信息:'.$ex->getMessage().'<br/>';
echo '获取错误编码:'.$ex->getCode().'<br/>';
echo '获取错误文件:'.$ex->getFile().'<br/>';
echo '获取错误导致行:'.$ex->getLine().'<br/>';
}
}
/**
* 获取全部数据
*@param string $sql SQL数据
*@param int $type 返回数据格式
*@return array
*/
publicfunction fetchAll($sql, $type ='assoc')
{
$stmt= $this->pdo->query($sql);
return $stmt->fetchAll($this->changeFetchType($type));
}
/**
* 获取一条数据
*@param string $sql SQL数据
*@param int $type 返回数据格式
*@return array
*/
publicfunction fetch($sql, $type ='assoc')
{
$stmt= $this->pdo->query($sql);
return $stmt->fetch($this->changeFetchType($type));
}
/**
* 获取匹配常量
*/
private function changeFetchType($type)
{
switch ($type) {
case 'assoc':
return PDO::FETCH_ASSOC;
break;
case 'num':
return PDO::FETCH_NUM;
break;
case 'obj':
return PDO::FETCH_OBJ;
break;
case 'both':
return PDO::FETCH_BOTH;
break;
default:
return PDO::FETCH_ASSOC;
break;
}
}
/**
* 执行数据操作语句
*@param string $sql SQL语句
*@return int 返回当前受影响的行数,失败则返回false
*/
publicfunction exec($sql)
{
return $this->pdo->exec($sql);
}
/**
* 获取最近插入的自增ID
*@return int
*/
publicfunction lastInsertId()
{
return $this->pdo->lastInsertId();
}
/**
* 负责返回当前实例
*@return MysqlPDO|object
*/
publicstatic function getInstance($param)
{
//如果当前对象时指定类的实例
if(!self::$instance instanceof self) {
self::$instance = new self($param);
}
return self::$instance;
}
}
$param = array(
'dbname'=> 'php9',
'username' => 'root'
);
//调用单例模式
$obj = MysqlPDO::getInstance($param);
var_dump($obj);
//获取所有数据
$data = $obj->fetchAll("select * fromadmin", "num");
var_dump($data);
//插入数据
$state = $obj->exec("insert into adminvalues (null, 111, 33333)");
var_dump($state);
//获取自增ID
echo $obj->lastInsertId();
- 单例模式PDO
- PHP pdo单例模式连接数据库
- 单例模式封装PDO链接数据库
- 工厂模式:单例模式封装数据库的具体操作(PDO)
- 自己做工具--封装PHP的PDO类--单例模式
- PDO模式
- pdo 单例的非class的写法
- pdo fetch模式
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 5.网络层(3)---路由选择协议
- 项目中使用的git工作流
- 递归实现汉诺塔问题
- unreal
- 二十七、配置元数据
- 单例模式PDO
- 搞事课堂 C++格式化硬盘
- test
- 批处理简单快捷方法
- POJ 1827 A Bunch Of Monsters 题解
- Android柱形图 绘制
- PYTHON 3.6 re(正则表达式)翻译
- scipy 特殊函数
- leetcode 7.Reverse Integer