注意事项: c o n f i g s = i n c l u d e o n c e ( configs=include_once( configs=includeonce(databasepath.‘database.php’); 这里需要改哦
使用说明
include_once('./Db.php');
echo "<br><pre>";
var_dump(Db::name('un_link')->field("id")->where("id=1")->fetchSql(true)->find() );
所有可用操作
- getAll($str)查询所有符合条件的 字符串形式(可选)
- table($str)定义查询表名 有前缀的表名字符串形式(必填)
- name($str)定义查询表名 没有前缀的表名 字符串形式(必填)
- alias($str)定义查询表别名没有前缀的表名 字符串形式(必填)
- field($str);查询字段,可以是数组也可以是字符串
- select($str)查询所有符合条件的 字符串形式(可选)
- count($str)统计数量,参数是要统计的字段名(可选)
- max($str)获取最大值,参数是要统计的字段名(必须)
- min($str) 获取最小值,参数是要统计的字段名(必须)
- avg($str) 获取最小值,参数是要统计的字段名(必须)
- sum 获取总分,参数是要统计的字段名(必须)
- find($str)查询一条 字符串形式(可选)
- order($str)排序 字符串形式
- JOIN($str)关联 字符串形式
- LEFTJOIN($str)左关联 字符串形式
- RIGHTJOIN($str)右关联 字符串形式
- where($v)查询条件,可以是数组也可以是字符串
- group($str)分组条件
- page(0,10)分页计算,限制数量
- limit(0,10)限制结果数量
- execute($sql)直接执行sql语句
- getlatsql()查询最后一条sql
- insert($array)添加
- update($array)修改
- delete($array)删除
- fetchSql(true)用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法。 例如:true
- failException 取消抛出异常,如果不传入任何参数,默认为关闭,用于select和find方法,例如:false
- resultset_type=数据库的查询结果也就是数据集,默认的配置下,数据集的类型是一个二维数组,可以配置数据库的 resultset_type 返回结果集:
和tp5对比没有的操作
1、UNION 操作用于合并两个或多个 SELECT 语句的结果集。
2、force 方法用于数据集的强制索引操作,例如:
3、时间查询
4、高级查询
5、子查询
6、事务操作
7、查询事件
8、注册事件
9、如果开启数据库的调试模式的话,你可以对数据库执行的任何SQL操作进行监听,使用如下方法5.0支持存储过程,如果我们定义了一个数据库存储过程sp_query,可以使用下面的方式调用:
10、ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。配置database.deploy 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下
11、DISTINCT 方法用于返回唯一不同的值 。
12、Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用:
13、cache可以用于select、find、value和column方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作,而是直接获取缓存中的数据,关于数据缓存的类型和设置可以参考缓存部分。
14、COMMENT方法 用于在生成的SQL语句中添加注释内容
<?php
/**
* 单例模式
**/
class Db
{
//保存全局实例
private static $instance;
//数据库连接句柄
private $_db;
public $_configs = [
// 数据库连接地址
'hostname' => "127.0.0.1",
// 数据库名称
'dbname' => "",
// 数据库账户
'username' => "",
// 数据库密码
'password' => "E7YhH8DZJGpfdb8A",
// 数据库表前缀
'prefix' => "",
'resultset_type' => false,
];//数据库配置
public $_getlatsql = [];//最后一次sql
/*需要每次使用表名都重置的*/
private $_table = null;//表名
private $_join = null;//where条件
private $_where = null;//where条件
private $_order = null;//order排序
private $_limit = null;//limit限定查询
private $_group = null;//group分组
private $_alias = null;//alias定义别名
private $_field = "*";//field定义字段
private $_fetchSql=false;
private $_failException=false;
//数据库连接参数
//私有化构造函数,防止外界实例化对象
private function __construct()
{
$link = $this->_db;
//$configs=include_once($databasepath.'database.php');
// var_dump($configs);
// echo "<br>";
$this->_configs=empty($configs)?$this->_configs:$configs;
// var_dump($this->_configs);die;
if(!$link){
$db = mysqli_connect($this->_configs['hostname'],$this->_configs['username'],$this->_configs['password'],$this->_configs['dbname']);
mysqli_query($db,"set names utf8");
if(!$db){
$this->ShowException("错误信息".mysqli_connect_error());
}
$this->_db = $db;
}
}
//私有化克隆函数,防止外界克隆对象
private function __clone()
{
}
/**
* 获取所有数据
*
* @param <type> $table The table
*
* @return boolean All.
*/
public function getAll($table=null){
$link = $this->_db;
if(!$link)return false;
$sql = "SELECT * FROM {$table}";
$array=$this->execute($sql);
if(is_string($array)||$this->_failException||$this->_configs['resultset_type']){
return $array;
}
$data = mysqli_fetch_all($array,MYSQLI_ASSOC);
return $data;
}
/*
*/
public function reset(){
$this->_failException=false;
$this->_fetchSql=false;
$this->_join = null;//where条件
$this->_where = null;//where条件
$this->_order = null;//order排序
$this->_limit = null;//limit限定查询
$this->_group = null;//group分组
$this->_alias = null;//alias定义别名
$this->_field = "*";//field定义字段
}
/*启动事务*/
public static function startTrans($table){
return mysqli_query($this->_db, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行
}
/*回滚事务*/
public static function rollback($table){
return mysqli_query($this->_db, "ROLLBACK"); // 判断当执行失败时回滚
}
/*提交事务*/
public static function commit($table){
return mysqli_commit($this->_db); //执行事务
}
public static function table($table){
if(!(self::$instance instanceof self))
{
self::$instance = new self();
}
self::$instance->_table("$table");
return self::$instance;
}
public function _table($table){
$this->reset();
$this->_table = $table;
return $this;
}
public static function name($table){
if(!(self::$instance instanceof self))
{
self::$instance = new self();
}
self::$instance->_name("$table");
return self::$instance;
}
public function _name($table){
$this->reset();
$this->_table = $this->_configs['prefix'].$table;
return $this;
}
public function alias($as){
$this->_alias = ' as '. $as;
return $this;
}
/**
* where条件
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function field($field='*'){
$fieldStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_array($field)){
foreach ($field as $key => $value) {
$fieldStr .= "'".$value."'";
}
$fieldStr = $fieldStr;
}elseif(is_string($field)&&!empty($field)){
$fieldStr = $field;
}
$this->_field = $fieldStr;
return $this;
}
/**
* 实现查询操作
*
* @param string $fields The fields
*
* @return boolean ( description_of_the_return_value )
*/
public function select($fields=""){
$fieldsStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($fields)){
$fieldsStr = implode(',', $fields);
}elseif(is_string($fields)&&!empty($fields)){
$fieldsStr = $fields;
}
if(empty($fields)){
$fields= $this->_field;
}
$sql = "SELECT {$fields} FROM {$this->_table} {$this->_alias} {$this->_join} {$this->_where} {$this->_order} {$this->_limit}";
// echo($sql."<br/>");
$array=$this->execute($sql);
if(is_string($array)||$this->_failException||$this->_configs['resultset_type']){
return $array;
}
$data = mysqli_fetch_all($array,MYSQLI_ASSOC);
return $data;
}
/**.$this->_alias
* 实现查询操作
*
* @param string $fields The fields
*
* @return boolean ( description_of_the_return_value )
*/
public function count($fields="*"){
// return $this->aggregation($fields,"count");
$fieldsStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($fields)){
$fieldsStr = implode(',', $fields);
}elseif(is_string($fields)&&!empty($fields)){
$fieldsStr = $fields;
}
$sql = "SELECT count({$fields}) FROM {$this->_table} {$this->_alias} {$this->_join} {$this->_where} {$this->_order} {$this->_limit}";
// echo($this->_where."<br/>");
// echo($sql."<br/>");
$array=$this->execute($sql);
if(is_string($array)||$this->_failException||$this->_configs['resultset_type']){
return $array;
}
$data = mysqli_fetch_all($array,MYSQLI_ASSOC);
// var_dump($data);die;
return $data[0]["count({$fields})"];
}
public function aggregation($fields,$type){
$fieldsArr = [];
$fieldsArr2=[];
$link = $this->_db;
if(!$link)return false;
if(is_array($fields)){
$fieldsArr = $fields ;
}elseif(is_string($fields)&&!empty($fields)){
$fieldsArr = explode(',', $fields);
}
foreach($fieldsArr as $key=>$val){
$fieldsArr2[]=$type."({$val})";
}
$fieldsStr=implode(',', $fieldsArr2);
$sql = "SELECT $fieldsStr FROM {$this->_table} {$this->_alias} {$this->_join} {$this->_where} {$this->_order} {$this->_limit}";
$array=$this->execute($sql);
if(is_string($array)||$this->_failException||$this->_configs['resultset_type']){
return $array;
}
$data = mysqli_fetch_all($array,MYSQLI_ASSOC);
return $data[0];
}
public function max($fields){
return $this->aggregation($fields,"max");
}
public function min($fields){
return $this->aggregation($fields,"min");
}
public function sum($fields){
return $this->aggregation($fields,"sum");
}
public function avg($fields){
return $this->aggregation($fields,"avg");
}
//
/**
* 实现查询操作
*
* @param string $fields The fields
*
* @return boolean ( description_of_the_return_value )
*/
public function find($fields=""){
$fieldsStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($fields)){
$fieldsStr = implode(',', $fields);
}elseif(is_string($fields)&&!empty($fields)){
$fieldsStr = $fields;
}
if(empty($fields)){
$fields= $this->_field;
}
$sql = "SELECT {$fields} FROM {$this->_table} {$this->_alias} {$this->_join} {$this->_where} {$this->_order} {$this->_limit}";
// echo($sql."<br/>");
$array=$this->execute($sql);
if(is_string($array)||$this->_failException||$this->_configs['resultset_type']){
return $array;
}
$data = mysqli_fetch_all($array,MYSQLI_ASSOC);
return $data[0];
}
/**
* order排序
*
* @param string $order The order
*
* @return boolean ( description_of_the_return_value )
*/
public function order($order=''){
$orderStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_string($order)&&!empty($order)){
$orderStr = "ORDER BY ".$order;
}
$this->_order = $orderStr;
return $this;
}
/**
* JOIN
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function JOIN($JOIN=''){
$JOINStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_string($JOIN)&&!empty($JOIN)){
$JOINStr = " join ".$JOIN;
}
$this->_join = $JOINStr;
return $this;
}
/**
* LEFTJOIN
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function LEFTJOIN($JOIN=''){
$JOINStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_string($JOIN)&&!empty($JOIN)){
$JOINStr = " LEFT JOIN ".$JOIN;
}
$this->_join = $JOINStr;
return $this;
}
/**
* LEFTJOIN
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function RIGHTJOIN($JOIN=''){
$JOINStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_string($JOIN)&&!empty($JOIN)){
$JOINStr = " RIGHT JOIN ".$JOIN;
}
$this->_join = $JOINStr;
return $this;
}
/**
* where条件
*
* @param string $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public function where($where=''){
$whereStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_array($where)){
foreach ($where as $key => $value) {
if(is_array($value)){
if($value == end($where)){
$whereStr .= "`".$key."` ".$value[0]." '".$value[1]."'";
}else{
$whereStr .= "`".$key."` ".$value[0]." '".$value[1].""."' AND ";
}
}else if($value == end($where)){
$whereStr .= "`".$key."` = '".$value."'";
}else{
$whereStr .= "`".$key."` = '".$value."' AND ";
}
}
$whereStr = "WHERE ".$whereStr;
}elseif(is_string($where)&&!empty($where)){
$whereStr = "WHERE ".$where;
}
$this->_where = $whereStr;
return $this;
}
/**
* group分组
*
* @param string $group The group
*
* @return boolean ( description_of_the_return_value )
*/
public function group($group=''){
$groupStr = '';
$link = $this->_db;
if(!$link)return false;
if(is_array($group)){
$groupStr = "GROUP BY ".implode(',',$group);
}elseif(is_string($group)&&!empty($group)){
$groupStr = "GROUP BY ".$group;
}
$this->_group = $groupStr;
return $this;
}
/**
*page 分页计算,限定查询
*
* @param string $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
public function page($page='',$limit=''){
$limitStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_array($page)){
list($page,$limit) = $page;
}else if((is_string($page)||!empty($page))&&empty($limit)){
list($page,$limit) = explode(",",$page);
}
if($page<1){
$page=1;
}
if(empty($limit)&&!empty($page)){
$limitStr = "LIMIT ".$page;
}else{
$limitStr = "LIMIT ".($page-1)*$limit.",".$limit;
}
/*Start limit*/
$this->_limit = $limitStr;
return $this;
}
/**
* limit限定查询
*
* @param string $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
public function limit($slimit='',$limit=''){
$limitStr = '';
$link = $this->_db;
if(!$link)return $link;
if(is_array($slimit)){
list($slimit,$limit) = $slimit;
}else if((is_string($slimit)||!empty($slimit))&&empty($limit)){
list($slimit,$limit) = explode(",",$slimit);
}
if($slimit>0){
$slimit = $slimit-1;
}else{
$slimit=0;
}
if(empty($limit)&&!empty($slimit)){
$limitStr = "LIMIT ".$slimit;
}else{
$limitStr = "LIMIT ".$slimit.",".$limit;
}
//var_dump($limitStr);die;
/*Start limit*/
$this->_limit = $limitStr;
return $this;
}
public function fetchSql($str){
$this->_fetchSql=$str;
return $this;
}
public function failException($str){
$this->_failException=$str;
return $this;
}
/**
* 执行sql语句
*
* @param <type> $sql The sql
*
* @return boolean ( description_of_the_return_value )
*/
public function execute($sql=null){
$link = $this->_db;
if(!$link)return false;
$this->_getlatsql=[$this->_table=>$sql];
if($this->_fetchSql){
return $sql;
}
$res = mysqli_query($this->_db,$sql);
// var_dump($sql);die;
// var_dump($res["current_field"]);
if(!$res){
if($this->_failException){
return null;
}else{
$errors = mysqli_error_list($this->_db);
$this->ShowException("报错啦!<br/>错误号:".$errors[0]['errno']."<br/>SQL错误状态:".$errors[0]['sqlstate']."<br/>错误信息:".$errors[0]['error']);
die();
}
}
return $res;
}
/**
* 执行sql语句
*
* @param <type> $sql The sql
*
* @return boolean ( description_of_the_return_value )
*/
public function getlatsql(){
return $this->_getlatsql[$this->_table];
}
/**
* 插入数据
*
* @param <type> $data The data
*
* @return boolean ( description_of_the_return_value )
*/
public function insert($data){
$link = $this->_db;
if(!$link)return false;
if(is_array($data)){
$keys = '';
$values = '';
foreach ($data as $key => $value) {
$keys .= "`".$key."`,";
$values .= "'".$value."',";
}
$keys = rtrim($keys,',');
$values = rtrim($values,',');
}
$sql = "INSERT INTO `{$this->_table}`({$keys}) VALUES({$values})";
// var_dump( $sql);die;
mysqli_query($this->_db,$sql);
$insertId = mysqli_insert_id($this->_db);
return $insertId;
}
/**
* 更新数据
*
* @param <type> $data The data
*
* @return <type> ( description_of_the_return_value )
*/
public function update($data){
$link = $this->_db;
if(!$link)return $link;
if(is_array($data)){
$dataStr = '';
foreach ($data as $key => $value) {
$dataStr .= "`".$key."`='".$value."',";
}
$dataStr = rtrim($dataStr,',');
}
$sql = "UPDATE `{$this->_table}` SET {$dataStr} {$this->_where} {$this->_order} {$this->_limit}";
$res = $this->execute($sql);
return $res;
}
/**
* 删除数据
*
* @return <type> ( description_of_the_return_value )
*/
public function delete(){
$link = $this->_db;
if(!$link)return $link;
$sql = "DELETE FROM `{$this->_table}` {$this->_where}";
$res = $this->execute($sql);
return $res;
}
/**
* 异常信息输出
*
* @param <type> $var The variable
*/
private function ShowException($var){
if(is_bool($var)){
var_dump($var);
}else if(is_null($var)){
var_dump(NULL);
}else{
echo "<pre style='position:relative;z-index:1000;padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;opacity:0.9;'>".print_r($var,true)."</pre>";
}
}
}