<?php
/*数据库访问类,支持链式访问 *function table($table):表名
*function where($where):条件
*function field(...$field):查询字段
*function order($order):排序方式
*function limit(...$limit):结果条数 功能函数:
*function item():查询单条
*function lists():查询多条
*function insert($data):插入数据
*function delete():删除数据
*function update($data):更新数据
*function count():总记录
*function my_index($arr,$index):自定义索引
*/
/*namespace Util\data;*/
class DbUtil{
private $field = ' * ';
private $table = '';
private $where = '';
private $order = '';
private $limit = '';
private $conn = ''; //静态调用,免去了创造对象
public static function getdb(){
return $db = new self;
} /* 链接数据库,静态函数*/
private static function db_conn(){
/* 创建链接
值不要写死,通过配置文件获取*/
$conn = mysqli_connect('118.193.141.119','sq_phpcl','fec897','sq_phpcl');
if(!$conn){
exit('Connection failed:'.mysqli_connect_error());
}
return $conn;
} /* 设定数据库,链式访问
$table:'user'*/
public function table($table){ $this->table = ' '.$table.' ';
return $this;
} /* 设定条件
$where :array('x>1'=>null,'name'=>'chenglin',...)*/
public function where($where){
$temp = ' WHERE ';
foreach($where as $value => $key){
if($key!=null){
$temp.=$value.'="'.$key.'" AND ';
}else{
$temp.=$value.' AND ';
}
}
$temp = substr($temp,0,-4);
$this->where = $temp;
return $this;
} /* 设定查询字段
...:以数组的形式接收多个参数
$field:'id,sex'*/
public function field($field){
$temp = '';
$temp .= " {$field} "; $this->field = $temp;
return $this;
} /* 设置查询排序排序方式
$order :'id desc'*/
public function order($order){
$order = ' ORDER BY '.$order.' ';
$this->order = $order;
return $this;
} /* 设置查询结果个数
$limit: 0,3*/
public function limit($limit1,$limit2 = ''){
if($limit2==''){
$limit = ' LIMIT '.$limit1.' ';
}else{
$limit = ' LIMIT '.$limit1.','.$limit2.' ';
}
$this->limit = $limit;
return $this;
} /* 重置变量*/
public function resetting(){
$this->field = ' * ';
$this->table = '';
$this->where = '';
$this->order = '';
$this->limit = '';
} /*
查询一个结果
返回数组*/
public function item(){
$conn = self::db_conn();
$sql = "SELECT{$this->field}FROM{$this->table}{$this->where} LIMIT 1"; if($result = mysqli_query($conn,$sql)){
while($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
}
//清空属性
$this->resetting();
return $rows[0]; }
} /* 查询结果集
返回二维数组*/
public function lists($index=''){
$conn = self::db_conn();
$sql = "SELECT{$this->field}FROM{$this->table}{$this->where}{$this->order}{$this->limit}";
if($result = mysqli_query($conn,$sql)){
while($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
} } if($index!=''){
$rows = $this->my_index($rows,$index);
}
//清空属性
$this->resetting();
return $rows;
} /* 插入数据
返回插入的id号插入成功
insert($data):array('name'=>'cl','sex'=>'男')*/
public function insert($data){
$conn = self::db_conn();
$field = $values = [];
foreach($data as $value=>$key){
$field[] = $value;
$values[] = $key;
}
$sql = "INSERT INTO {$this->table} (".implode(',',$field).")VALUES('".implode("','",$values)."')";
$insert_id = 0;
if(mysqli_query($conn,$sql)){
//插入的id
$insert_id = mysqli_insert_id($conn);
}
$this->resetting();
echo $sql;
return $insert_id;
} /* 删除数据
返回1删除成功*/
public function delete(){
//保险,防止全部被更改
if($this->where == ''){
$this->resetting();
return 0;
}
$conn = self::db_conn();
$sql = "DELETE FROM{$this->table}{$this->where}";
$res = mysqli_query($conn,$sql);
$this->resetting();
return $res;
} /* 更新数据
$data:array('name'=>cl,'age'=>18)
返回1更新成功*/
public function update($data){
//保险,防止全部被更改
if($this->where == ''){
$this->resetting();
return 0;
}
$conn = self::db_conn();
$set = ' SET ';
foreach($data as $value=>$key){
$set.=$value."='".$key."' ,";
}
$set = rtrim($set,',');
$sql = "UPDATE{$this->table}{$set}{$this->where}";
$res = mysqli_query($conn,$sql);
$this->resetting();
return $res;
} /* 自定义索引
$arr:查询到的lists二维数组
$index:$key的键*/
public function my_index($arr,$index){
$new_arr = [];
foreach($arr as $value=>$key){
$new_arr[$key[$index]] = $key;
}
return $new_arr;
} //查询记录总数
public function count(){
$conn = self::db_conn();
$sql = "SELECT * FROM {$this->table}{$this->where}";
$count = 0;
if($result = mysqli_query($conn,$sql)){
//查询总条数
$count = mysqli_num_rows($result);
}
$this->resetting();
return $count;
} } ?>

自定义php-mysqli工具增强类,支持链式调用的更多相关文章

  1. RxJava(十一)defer操作符实现代码支持链式调用

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52597643 本文出自:[余志强的博客] 一.前言 现在越来越多An ...

  2. js链式调用

    我们都很熟悉jQuery了,只能jQuery中一种非常牛逼的写法叫链式操作 * $('#div').css('background','#ccc').removeClass('box').stop() ...

  3. 疯狂的类构造器Builder模式,链式调用

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  4. C#中扩展StringBuilder支持链式方法

    本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...

  5. 基于JDK动态代理实现的接口链式调用(Fluent Interface)工具

    什么是链式接口(Fluent Interface) 根据wikipedia上的定义,Fluent interface是一种通过链式调用方法来完成方法的调用,其操作分为终结与中间操作两种.[1] 下面是 ...

  6. jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. JavaScript运动_封装模板(支持链式运动、完美运动)

    最近自学到了JS运动部分,自己整理了一些js模板,望采纳. 1.支持链式运动的模板: 先解释一下函数中的几个参数含义: 1)obj: 要操作的对象 2)target: 属性要到达的目标值 3)attr ...

  8. JavaScript设计模式——方法的链式调用

    方法的链式调用: (function() { //私有类 function _$ (els) { this.elements = []; for(var i = 0, len = els.length ...

  9. 编程中的链式调用:Scala示例

    编程中的链式调用与Linux Shell 中的管道类似.Linux Shell 中的管道 ,会将管道连接的上一个程序的结果, 传递给管道连接的下一个程序作为参数进行处理,依次串联起N个实用程序形成流水 ...

随机推荐

  1. python3练习100题——050

    题目:输出一个随机数. 程序分析:使用 random 模块. import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 pri ...

  2. java学习笔记之反射—Class类实例化和对象的反射实例化

    反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类的实例化对象,可以采用三种方式完成. java.lang.Class类的定义: public f ...

  3. NetCore使用使用Scaffold-DbContext命令生成数据库表实体类

    一.为了模拟项目,本处创建了一个NetCore的Web项目.打算在Models文件夹下生成数据库表的实体类. 二.在程序包管理控制台,输入“Scaffold-DbContext "Serve ...

  4. 在Scala中免费验证

    优锐课带你详细了解如何在Scala中实施免费的monad验证.抽丝剥茧,细说架构那些事! 由于业务数据的复杂性,已经在数据验证上花费了很多精力.在Scala中,提出了使用应用程序进行验证的方法,并被广 ...

  5. weflow的坑

    开发工具weflow的坑 使用less,css预处理器.如果less文件有问题项目不能正常打开需要排除错误后才能正常打开.今天遇到个问题background:rgba(255,255,255 .35) ...

  6. win10文件夹 无法显示当前所有者 管理员都不行

    1.在win10系统桌面上,任务栏,右键,单击任务管理器. 2.单击性能. 3.单击打开资源监视器. 4.在单击CPU标签,然后再“关联的句柄”右侧的搜索框中输入要删除的文件夹名.例:tre文件夹名. ...

  7. 微信小程序自定义顶部导航

    注释:自定义导航需要自备相应图片 一.设置自定义顶部导航 Navigation是小程序的顶部导航组件,当页面配置navigationStyle设置为custom的时候可以使用此组件替代原生导航栏. 1 ...

  8. Wannafly Camp 2020 Day 1C 染色图 - 组合数学,整除分块

    定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包 ...

  9. Loj514「LibreOJ β Round #2」模拟只会猜题意 - 模拟

    注意初始化即可. #include <bits/stdc++.h> using namespace std; ],a[],t1,t2,t3,t4; int main(){ memset(a ...

  10. Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type

    问题描述 将项目挂载到 Myeclipse 的 tomcat 上,启动 tomcat ,报错“Initialization of bean failed; nested exception is ja ...