php打包mysql_PHP封装MySQL的单例
//封装MySQL单例
class MySQLDB {
private $host;//主机地址
private $port;//端口号
private $user;//用户名
private $pwd;//密码
private $dbname;//数据接名
private $charset;//字符集
private $link;//连接对象
private static $instance;
private function __construct($param) {
$this->initParam($param);
$this->initConnect();
}
private function __clone() {
}
//获取单例
public static function getInstance($param=array()) {
if(!self::$instance instanceof self)
self::$instance=new self($param);
return self::$instance;
}
//初始化参数
private function initParam($param) {
$this->host=$param['host']??'127.0.0.1';
$this->port=$param['port']??'3306';
$this->user=$param['user']??'';
$this->pwd=$param['pwd']??'';
$this->dbname=$param['dbname']??'';
$this->charset=$param['charset']??'utf8';
}
//连接数据库
private function initConnect() {
$this->link=@mysqli_connect($this->host,$this->user,$this->pwd,$this->dbname);
if(mysqli_connect_error()){
echo '数据库连接失败
';
echo '错误信息:'.mysqli_connect_error(),'
';
echo '错误码:'.mysqli_connect_errno(),'
';
exit;
}
mysqli_set_charset($this->link,$this->charset);
}
//执行数据库的增、删、改、查
private function execute($sql) {
if(!$rs=mysqli_query($this->link,$sql)){
echo 'SQL语句执行失败
';
echo '错误信息:'.mysqli_error($this->link),'
';
echo '错误码:'.mysqli_errno($this->link),'
';
echo '错误的SQL语句:'.$sql,'
';
exit;
}
return $rs;
}
/**
*执行增、删、改
[email protected] bool 成功返回true,失败返回false
*/
public function exec($sql) {
$key=substr($sql,0,6);
if(in_array($key,array('insert','update','delete')))
return $this->execute($sql);
else{
echo '非法访问
';
exit;
}
}
//获取自动增长的编号
public function getLastInsertId() {
return mysqli_insert_id($this->link);
}
//执行查询语句
private function query($sql) {
if(substr($sql,0,6)=='select' || substr($sql,0,4)=='show' || substr($sql,0,4)=='desc'){
return $this->execute($sql);
}else{
echo '非法访问
';
exit;
}
}
/**
* 将查询结果改为二维数组
*执行查询语句,返回二维数组
*@$sql string 查询sql语句
[email protected] string assoc|num|both
*/
public function fetchAll($sql,$type='assoc') {
$rs=$this->query($sql);
$type=$this->getType($type);
//$rs代表从一个数据库查询中获取的结果集。
//mysqli_fetch_all 将所有结果行作为关联数组、数字数组或两者都提取
return mysqli_fetch_all($rs,$type);
}
//只有一条记录的时候 应该只返回一条记录
//匹配一维数组
public function fetchRow($sql,$type='assoc') {
$list=$this->fetchAll($sql,$type);
//如果二维数组不为空 则返回第一条数据
if(!empty($list))
return $list[0];
return array();
}
//匹配一行一列
//如 查询数据的条数 只需要一行实际内容就行
public function fetchColumn($sql) {
$list=$this->fetchRow($sql,'num');
if(!empty($list))
return $list[0];
return null;
}
//获取匹配类型
//设置数组键的类型
private function getType($type) {
switch($type){
case 'num':
return MYSQLI_NUM;
case 'both':
return MYSQLI_BOTH;
default:
return MYSQLI_ASSOC;//如果没有传入则默认的ASSOC
}
}
}
//测试
//配置参数
$param=array(
'user'=>'root',
'pwd'=>'root',
'dbname'=>'data'
);
//获取单例
$db=MySQLDB::getInstance($param);
//更新
//$db->exec("update news set title='青草' where id=2");
//插入
/*
if($db->exec("insert into news values (null,'aa','bb',unix_timestamp())"))
echo '编号是:'.$db->getLastInsertId();
*/
//查询
//$list=$db->fetchAll('select * from news','aa');
//$list=$db->fetchRow('select * from news where id=1','aa');
$list=$db->fetchColumn('select count(*) from news');
echo '';
var_dump($list);
php打包mysql_PHP封装MySQL的单例相关推荐
- 封装mysql数据库操作系统_封装MySQL的单例,连接数据库并对数据进行增删改查操作...
//私有的构造方法用来阻止在类的外部实例化private function __construct($param){$this->initData($param);$this->conne ...
- 身边的设计模式(一):单例 与 RedisCacheManager
大家好,以后我会用23篇文章,来给大家讲解设计模式,当然如果你看过我的项目,很多设计模式已经很会了,只是没有注意到,我这里会讲解一下,大家就会发现,如果你看懂了我的项目,其实已经至少学会了六种设计模式 ...
- C++ 类中的static成员的使用及单例设计示例
文章目录 static 静态成员变量 static静态成员函数 单例设计模式 单例实现图片资源的封装(很实用) 静态成员:被static修饰的成员变量\函数 可以通过对象(对象.静态成员).对象指针( ...
- php单例模式实现对象只被创建一次 mysql单例操作类
这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. ...
- Django验证码*短信验证码之2-容联云通讯短信平台(联云通讯短信平台介绍、容联云通讯Python SDK、封装发送短信单例类)
容联云通讯短信平台介绍 容联云通讯网址:https://www.yuntongxun.com/ 容联云管理控制台 容联云创建应用 容联云通讯Python SDK https://doc.yuntong ...
- mysql 联合索引 单个索引_mysql的单例索引和联合索引
--联合索引查询第一个.第二个参数(走索引) explain select* from emp where ENAME = 'wang' and JOB 单例索引:在数据库的单例上建立的索引. 联合索 ...
- Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式
一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...
- 2.vue3医疗在线问诊项目 - _登录模块 ==> 代码片段、css变量主题定制、cp-nav-bar组件封装、svg打包精灵图插件、cp-icon组件封装、表单校验、密码登录、短信验证码登录及两者
2.医疗在线问诊项目 - _登录模块 ==> 代码片段.css变量主题定制.cp-nav-bar组件封装.svg打包精灵图插件.cp-icon组件封装.表单校验.密码登录.短信验证码登录及两者的 ...
- mysql为什么要单例_为什么要用单例,你真的会写单例模式吗
优秀的设计结构可以规避很多潜在的性能问题,对系统性能的影响可能远远大于代码的优化,所以我们需要知道一些设计模式和方法. 单例模式: 单例模式是一种对象创建模式,用于生产一个对象的实例,它可以确保系统中 ...
最新文章
- three.js 调用网络摄像头
- 企业为什么要开通银企直联_企业为什么要把人事外包出去
- buu [GKCTF2020]小学生的密码学
- C# 之 用NPOI类库操作Excel
- windows和linux运算结果不同,从Windows和Linux读取文件会产生不同的结果(字符编码?)...
- 基于ssm框架和freemarker的商品销售系统
- 用Java实现图片验证码功能
- 上海芯导电子科技股份有限公司IPO过会
- C++新特性探究(四):Raw String Literals
- eclipse java jsp_Javaweb学习笔记4 使用Eclipse快速开发JSP
- DWR第五篇之文件上传
- 区块链项目开发最容易受区块链技术影响的行业
- 京东黑科技引爆车联网时代 你的爱车升级了吗?
- WebLogic 服务器概述 与 部署 Java Web 应用
- GPT分区表出现问题后的数据恢复思路
- 360全景倒车影像怎么看_360全景倒车影像开的时候能看到前面的状况吗
- 微信公众平台一直限制配置失败-106
- 嵌入式Linux的MiniGUI研究和移植
- 晏殊几何学导读花间流风方程定义与引理
- Mac的常用快捷键(包括数学字符)
热门文章
- 使用Jenkins来实现内部的持续集成流程(上)
- Canny边缘检测及C++实现
- 大数据的乘法实现——C语言
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)...
- IOS启程06—iOS设置圆角图片
- Android倒计时案例展示
- .Net core下的配置设置(一)——Configuration
- Hadoop集群配置搭建
- Yii2-admin RBAC权限管理的实现
- Javascript笔记:(实践篇)从jQuery插件技术说起-分析extend方法的源码(发现extend方法里有bug)(下篇)...