<?php

class DB {
//定义属性
private $host;//主机名
private $port;//端口号
private $name;//用户名
private $pass;//密码
private $dbname;//数据库名
private $charset;//设置字符集
private $link;//连接数据库
private static $instance;
//初始化 构造函数
private function __construct($arr = array()){
$this->host = isset($arr['host']) ? $arr['host'] : '127.0.0.1' ;
$this->port = isset($arr['port']) ? $arr['port'] : '3306' ;
$this->name = isset($arr['name']) ? $arr['name'] : 'root' ;
$this->pass = isset($arr['pass']) ? $arr['pass'] : 'root' ;
$this->dbname = isset($arr['dbname']) ? $arr['dbname'] : '1904a' ;
$this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8' ;
//连接数据库
$this->db_connect();
//选择数据库
$this->db_usedb();
//设置字符集
$this->db_charset();
}
//连接数据库
private function db_connect(){
//主机名:端口号 用户名 密码
$this->link = mysqli_connect($this->host.':'.$this->port, $this->name, $this->pass);
//连接失败
if(!$this->link){
echo '数据库连接失败<br>';
echo '错误编码是:'.mysqli_errno($this->link).'<br>';
echo '错误信息是:'.mysqli_error($this->link).'<br>';
exit;
}
}
//选择数据库
private function db_usedb(){
mysqli_query($this->link, "use {$this->dbname}");
}
//设置字符集
private function db_charset(){
mysqli_query($this->link, "set names {$this->charset}");
}
//私有化克隆函数,防止外界克隆对象
private function __clone()
{
} //单例访问统一入口
public static function getInstance($arr)
{
if(!(self::$instance instanceof self))
{
self::$instance = new self($arr);
}
return self::$instance;
}
/**
* 执行语句
* @param $sql
* @return source
*/
private function query($sql){
$res = mysqli_query($this->link, $sql);
if(!$res){
echo 'sql语句有错误<br>';
echo '错误编码是:'.mysqli_errno($this->link).'<br>';
echo '错误信息是:'.mysqli_error($this->link).'<br>';
exit;
}
return $res;//成功返回数据
}
/**
* 获取刚插入数据的id
* @return int
*/
public function getInsertId(){
return mysqli_insert_id($this->link);
}
/**
* 查询某个字段, 例如 select count(*), select username
* @param $sql
* @return string or int
*/
public function getOne($sql){
$query = $this->query($sql);
return mysqli_free_result($query);
}
/**
* 获取一行记录
* @param $sql
* @return array 一维
*/
public function getRow($sql, $type='assoc'){
$query = $this->query($sql);
if(!in_array($type, array("assoc", "array", "row"))){
die("mysql_query error");
}
$functionname = "mysqli_fetch_".$type;
return $functionname($query);
}
/**
* 前置条件:通过资源获取一条记录
* @param $query source
* @return array 一维
*/
public function getRowFromSource($query, $type="assoc"){
if(!in_array($type, array("assoc", "array", "row"))){
die("mysql_query error");
}
$functionname = "mysqli_fetch_".$type;
return $functionname($query);
}
/**
* 获取所有记录
* @param $sql
* @return array 二维
*/
public function getAll($sql){
$query = $this->query($sql);
$list = array();
while ($row = $this->getRowFromSource($query)) {
$list[] = $row;
}
return $list;
}
/*
* 新增数据方法
* @param1 $table, $data 表名 数据
* @return 上一次增加操做产生ID值
*/
public function insert($table, $data){
//遍历数组,得到每一个字段和字段的值
$kstr = '' ;
$vstr = '' ;
foreach ($data as $key => $val) {
//$key是字段名, $val是对应的值
$kstr .= $key."," ;
$vstr .= "'$val',";
}
$kstr = rtrim($kstr, ',');
$vstr = rtrim($vstr, ',');
//添加的sql语句
$sql = "insert into $table ($kstr) values ($vstr)"; //执行
$this->query($sql);
//返回上一次增加操做产生ID值
return $this->getInsertId();
}
/*
* 删除一条数据方法
* @param1 $table, $where=array('id'=>'1') 表名 条件
* @return 受影响的行数
*/
public function deleteOne($table, $where){
if(is_array($where)){
foreach ($where as $key => $val) {
$condition = $key.'='.$val;
}
} else {
$condition = $where;
}
$sql = "delete from $table where $condition";
$this->query($sql);
//返回受影响的行数
return mysqli_affected_rows($this->link);
}
/*
* 删除多条数据方法
* @param1 $table, $where 表名 条件
* @return 受影响的行数
*/
public function deleteAll($table, $where){
if(is_array($where)){
foreach ($where as $key => $val) {
if(is_array($val)){
$condition = $key.' in ('.implode(',', $val) .')';
} else {
$condition = $key. '=' .$val;
}
}
} else {
$condition = $where;
}
$sql = "delete from $table where $condition";
$this->query($sql);
//返回受影响的行数
return mysqli_affected_rows($this->link);
}
/*
* 修改数据方法
* @param1 $table,$data,$where 表名 数据 条件
* @return 受影响的行数
*/
public function update($table,$data,$where){
//遍历数组,得到每一个字段和字段的值
$str='';
if(is_array($data)){
foreach($data as $key=>$v){
$str.="$key='$v',";
}
$str=rtrim($str,',');
//修改的SQL语句
$sql="update $table set $str where $where";
} else {
//修改的SQL语句
$sql="update $table set $data where $where";
}
$this->query($sql);
//返回受影响的行数
return mysqli_affected_rows($this->link);
} }
//$db_dsn = [
// 'host' => '127.0.0.1',
// 'port' => '3306',
// 'name' => 'root',
// 'pass' => 'root',
// 'dbname' => '1904a',
// 'charset' => 'utf8'
//];
$db = DB::getInstance($arr=[]); $sql = "select * from caiji";
$data = $db->getAll($sql); //$insert_data = [
// 'title' => '1234',
// 'img' => 'https://cdn.huodongxing.com/logo/202105/8598383158600/294155439743834_v2small.jpg',
// 'start_time' => '06月15日'
//]; //$res = $db->insert('caiji',$insert_data);
//var_dump($res);
//echo $db->getInsertId();
//$where = ['id'=> '453'];
//$res = $db->deleteOne('caiji',$where);
//print_r($res);
$update_data = [
'title' => '11111111',
'img' => '2222222',
'start_time' => '6月10日'
];
$where = 'id=452';
$res = $db->update('caiji',$update_data,$where);
var_dump($res);

MySQL-DB-封装-升级版的更多相关文章

  1. rhel6.4 安装nodejs和Mysql DB服务

    rhel6.4 安装nodejs和Mysql DB服务 安装好redhat6.4虚拟机后, 安装软件: # yum install gcc-c++ openssl-devel Loaded plugi ...

  2. LightMysql:为方便操作MySQL而封装的Python类

    原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...

  3. mysql数据库封装和 分页查询

    1 之前我们学到了php连接mysql数据库的增删改查,中间要多次调用数据库, 而且以后用到的表比较多,上传中如果需要改数据的话会非常麻烦,但是如果 我们把数据库封装,到时就可以很轻松的把改掉一些数据 ...

  4. java连接mysql底层封装

    package com.dao.db; import java.sql.Connection; import java.sql.SQLException; /** * 数据库连接层MYSQL * @a ...

  5. nodejs学习(三)--express连接mysql数据库,mysql查询封装

    一.说一下 连接不同的数据库需要安装相应的插件,此demo使用mysql数据库,需自行安装mysql数据库软件. 新建数据库webapp, 新建表users: 二.直接开码 npm install m ...

  6. mysql数据库封装

    <?php /** * name: sql操作封装,可扩展 . * User: 张云山 * Date: 2016/9/4 * Time: 22:02 */ //php文件编码设置header(' ...

  7. mysql DB server端,如何让读写更快

    其实,我不是专业的DB管理同学,甚至算不上会了解.只是在最近的工作中,遇到了DB server端优化的契机,所以把这些手段记录下来: 通过调整这个参数的值,可以让DB更给力: 这两个参数的含义: 1. ...

  8. Mysql,JDBC封装

    1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...

  9. (转)使用Amoeba 实现MySQL DB 读写分离

    Amoeba(变形虫)项目是一个开源框架,于2008年开始发布一款 Amoeba for Mysql软件: 这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQ ...

  10. 在.NET连接MySQL以及封装好的MySQLHelper.cs

    1.首先上MySQL网站下驱动:http://www.mysql.com/products/connector/ 2.安装下载的安装包 3.我们在Visual Studio里创建一个Web Appli ...

随机推荐

  1. AtCoder ABC213 简要题解

    这世道连 \(\rm ABC\) 都要写题解来续命了... A - D 略. E 有如下观察: 对于任意的四个方格,出去之后再回来可以调整为先在内部走到固定位置再走出去. 因此只需要考虑在一开始把内部 ...

  2. python--003 数据类型

    运算符 in "heilo" in "adfsdfsdfsdfsdfdsfdshellofsdfdsf" "li"  in ["l ...

  3. Android Adapter基本理解

    感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...

  4. 一致性协议之ZAB

    前言 一致性协议 包括 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了.为什么呢?因为他是为 Zookeeper 设计的 ...

  5. 有手就行3——持续集成环境—maven、tomcat、安装和配置

    有手就行3--持续集成环境-maven.tomcat.安装 持续集成环境(5)-Maven安装和配置 持续集成环境(6)-Tomcat安装和配置 持续集成环境(5)-Maven安装和配置 在Jenki ...

  6. 还在做廉价的劳动力?部署PXE实现Kickstart无人值守安装

    搭建PXE实现Kickstart无人值守安装 1.搭建PXE远程安装服务器 2.实现kicstart无人值守安装 1.PXE介绍及搭载: PXE是有Intel公司开发的网络引导技术,工作在Client ...

  7. 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理

    摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...

  8. Python解释器安装、多版本共存以及手动添加环境变量教程

    Python解释器安装.多版本共存以及手动添加环境变量教程 一.Python解释器下载 1. 先进入官网(python.org) 下图为网站的主页,依次按顺序点击"①Download&quo ...

  9. node(s) didn‘t match node selector.

    k8s集群中,有pod出现了 Pending ,通过 kubectl describe pod 命令,发现了如下报错 0/4 nodes are available: 1 node(s) had ta ...

  10. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...