1. <?php
  2.  
  3. class DB {
  4. //定义属性
  5. private $host;//主机名
  6. private $port;//端口号
  7. private $name;//用户名
  8. private $pass;//密码
  9. private $dbname;//数据库名
  10. private $charset;//设置字符集
  11. private $link;//连接数据库
  12. private static $instance;
  13. //初始化 构造函数
  14. private function __construct($arr = array()){
  15. $this->host = isset($arr['host']) ? $arr['host'] : '127.0.0.1' ;
  16. $this->port = isset($arr['port']) ? $arr['port'] : '3306' ;
  17. $this->name = isset($arr['name']) ? $arr['name'] : 'root' ;
  18. $this->pass = isset($arr['pass']) ? $arr['pass'] : 'root' ;
  19. $this->dbname = isset($arr['dbname']) ? $arr['dbname'] : '1904a' ;
  20. $this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8' ;
  21. //连接数据库
  22. $this->db_connect();
  23. //选择数据库
  24. $this->db_usedb();
  25. //设置字符集
  26. $this->db_charset();
  27. }
  28. //连接数据库
  29. private function db_connect(){
  30. //主机名:端口号 用户名 密码
  31. $this->link = mysqli_connect($this->host.':'.$this->port, $this->name, $this->pass);
  32. //连接失败
  33. if(!$this->link){
  34. echo '数据库连接失败<br>';
  35. echo '错误编码是:'.mysqli_errno($this->link).'<br>';
  36. echo '错误信息是:'.mysqli_error($this->link).'<br>';
  37. exit;
  38. }
  39. }
  40. //选择数据库
  41. private function db_usedb(){
  42. mysqli_query($this->link, "use {$this->dbname}");
  43. }
  44. //设置字符集
  45. private function db_charset(){
  46. mysqli_query($this->link, "set names {$this->charset}");
  47. }
  48. //私有化克隆函数,防止外界克隆对象
  49. private function __clone()
  50. {
  51. }
  52.  
  53. //单例访问统一入口
  54. public static function getInstance($arr)
  55. {
  56. if(!(self::$instance instanceof self))
  57. {
  58. self::$instance = new self($arr);
  59. }
  60. return self::$instance;
  61. }
  62. /**
  63. * 执行语句
  64. * @param $sql
  65. * @return source
  66. */
  67. private function query($sql){
  68. $res = mysqli_query($this->link, $sql);
  69. if(!$res){
  70. echo 'sql语句有错误<br>';
  71. echo '错误编码是:'.mysqli_errno($this->link).'<br>';
  72. echo '错误信息是:'.mysqli_error($this->link).'<br>';
  73. exit;
  74. }
  75. return $res;//成功返回数据
  76. }
  77. /**
  78. * 获取刚插入数据的id
  79. * @return int
  80. */
  81. public function getInsertId(){
  82. return mysqli_insert_id($this->link);
  83. }
  84. /**
  85. * 查询某个字段, 例如 select count(*), select username
  86. * @param $sql
  87. * @return string or int
  88. */
  89. public function getOne($sql){
  90. $query = $this->query($sql);
  91. return mysqli_free_result($query);
  92. }
  93. /**
  94. * 获取一行记录
  95. * @param $sql
  96. * @return array 一维
  97. */
  98. public function getRow($sql, $type='assoc'){
  99. $query = $this->query($sql);
  100. if(!in_array($type, array("assoc", "array", "row"))){
  101. die("mysql_query error");
  102. }
  103. $functionname = "mysqli_fetch_".$type;
  104. return $functionname($query);
  105. }
  106. /**
  107. * 前置条件:通过资源获取一条记录
  108. * @param $query source
  109. * @return array 一维
  110. */
  111. public function getRowFromSource($query, $type="assoc"){
  112. if(!in_array($type, array("assoc", "array", "row"))){
  113. die("mysql_query error");
  114. }
  115. $functionname = "mysqli_fetch_".$type;
  116. return $functionname($query);
  117. }
  118. /**
  119. * 获取所有记录
  120. * @param $sql
  121. * @return array 二维
  122. */
  123. public function getAll($sql){
  124. $query = $this->query($sql);
  125. $list = array();
  126. while ($row = $this->getRowFromSource($query)) {
  127. $list[] = $row;
  128. }
  129. return $list;
  130. }
  131. /*
  132. * 新增数据方法
  133. * @param1 $table, $data 表名 数据
  134. * @return 上一次增加操做产生ID值
  135. */
  136. public function insert($table, $data){
  137. //遍历数组,得到每一个字段和字段的值
  138. $kstr = '' ;
  139. $vstr = '' ;
  140. foreach ($data as $key => $val) {
  141. //$key是字段名, $val是对应的值
  142. $kstr .= $key."," ;
  143. $vstr .= "'$val',";
  144. }
  145. $kstr = rtrim($kstr, ',');
  146. $vstr = rtrim($vstr, ',');
  147. //添加的sql语句
  148. $sql = "insert into $table ($kstr) values ($vstr)";
  149.  
  150. //执行
  151. $this->query($sql);
  152. //返回上一次增加操做产生ID值
  153. return $this->getInsertId();
  154. }
  155. /*
  156. * 删除一条数据方法
  157. * @param1 $table, $where=array('id'=>'1') 表名 条件
  158. * @return 受影响的行数
  159. */
  160. public function deleteOne($table, $where){
  161. if(is_array($where)){
  162. foreach ($where as $key => $val) {
  163. $condition = $key.'='.$val;
  164. }
  165. } else {
  166. $condition = $where;
  167. }
  168. $sql = "delete from $table where $condition";
  169. $this->query($sql);
  170. //返回受影响的行数
  171. return mysqli_affected_rows($this->link);
  172. }
  173. /*
  174. * 删除多条数据方法
  175. * @param1 $table, $where 表名 条件
  176. * @return 受影响的行数
  177. */
  178. public function deleteAll($table, $where){
  179. if(is_array($where)){
  180. foreach ($where as $key => $val) {
  181. if(is_array($val)){
  182. $condition = $key.' in ('.implode(',', $val) .')';
  183. } else {
  184. $condition = $key. '=' .$val;
  185. }
  186. }
  187. } else {
  188. $condition = $where;
  189. }
  190. $sql = "delete from $table where $condition";
  191. $this->query($sql);
  192. //返回受影响的行数
  193. return mysqli_affected_rows($this->link);
  194. }
  195. /*
  196. * 修改数据方法
  197. * @param1 $table,$data,$where 表名 数据 条件
  198. * @return 受影响的行数
  199. */
  200. public function update($table,$data,$where){
  201. //遍历数组,得到每一个字段和字段的值
  202. $str='';
  203. if(is_array($data)){
  204. foreach($data as $key=>$v){
  205. $str.="$key='$v',";
  206. }
  207. $str=rtrim($str,',');
  208. //修改的SQL语句
  209. $sql="update $table set $str where $where";
  210. } else {
  211. //修改的SQL语句
  212. $sql="update $table set $data where $where";
  213. }
  214. $this->query($sql);
  215. //返回受影响的行数
  216. return mysqli_affected_rows($this->link);
  217. }
  218.  
  219. }
  220. //$db_dsn = [
  221. // 'host' => '127.0.0.1',
  222. // 'port' => '3306',
  223. // 'name' => 'root',
  224. // 'pass' => 'root',
  225. // 'dbname' => '1904a',
  226. // 'charset' => 'utf8'
  227. //];
  228. $db = DB::getInstance($arr=[]);
  229.  
  230. $sql = "select * from caiji";
  231. $data = $db->getAll($sql);
  232.  
  233. //$insert_data = [
  234. // 'title' => '1234',
  235. // 'img' => 'https://cdn.huodongxing.com/logo/202105/8598383158600/294155439743834_v2small.jpg',
  236. // 'start_time' => '06月15日'
  237. //];
  238.  
  239. //$res = $db->insert('caiji',$insert_data);
  240. //var_dump($res);
  241. //echo $db->getInsertId();
  242. //$where = ['id'=> '453'];
  243. //$res = $db->deleteOne('caiji',$where);
  244. //print_r($res);
  245. $update_data = [
  246. 'title' => '11111111',
  247. 'img' => '2222222',
  248. 'start_time' => '6月10日'
  249. ];
  250. $where = 'id=452';
  251. $res = $db->update('caiji',$update_data,$where);
  252. 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. Java UDP实现聊天功能代码【转】

    感谢大佬大佬!!!:https://www.cnblogs.com/woshijpf/p/3735684.html 我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务 ...

  2. smartimageview 的原理

    自定义的控件在布局文件中的引用都需要指定类的完整路径 1.自定义了一个MyImageview类继承了Imageview,添加三个构造方法     2.添加一个setImageUrl方法接受一个图片ur ...

  3. JSP中获取各种路径的方法

    我们当中可能有很多人不知道如何获得jsp中的路径怎么获取 方法一: <a href ="test.jsp?p=fuck">跳转到test2</a> 方法二: ...

  4. FTP工具安装

    开放ftp端口,开房ftp服务即可 firewall-cmd --add-service=ftp --permanent firewall-cmd --reload

  5. oracle查看当前正在使用的数据库

    select name from V$DATABASE; 也可以用 select SYS_CONTEXT('USERENV','INSTANCE_NAME') from dual;

  6. Solution -「多校联训」古老的序列问题

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),和 \(q\) 次形如 \([L,R]\) 的询问,每次回答 \[\sum_{[l,r]\su ...

  7. [LeetCode]14.最长公共前缀(Java)

    原题地址: longest-common-prefix 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:st ...

  8. 多端开发之uniapp开发app

    最近在给f做一些工具app,学习了不少关于uniapp编写android应用的知识. 首先,App应用的创建的时候要选择项目类型为uniapp类型.最开始我选择的是h5+项目,这种项目就比较容易写成纯 ...

  9. 【摸鱼神器】基于SSM风格的Java源代码生成器 单表生成 一对一、一对多、多对多连接查询生成

    一.序言 UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器.代码生成器模块属于可拆卸模块,即按需引入.代码生成器生成SSM(Spring.SpringBoot.Myb ...

  10. Spring Cloud之微服务注册到Eureka Server集群后访问改造

    上篇Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼ - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)已经已经成功将两个微服务注册到集群中,那么能正常能与注 ...