PHP封装MySQLi数据库操作类

<?php
/**
 * Created by PhpStorm.
 * User: Sudo
 * Date: 2017/7/11
 * Time: 20:22
 */


//设置编码格式(防止乱码)
header("Content-type: text/html; charset=utf-8");

// 1 同壹个类,方法和变量必须加$this->变量/方法,但参数不需要
// 2 变量定义必须加上权限修饰符(封装)
// 3 常量定义 const 不需要加权限修饰符和$
// 4 类中的构造函数只能有一个

class Tools {
    private $link = null;

    function __construct(){
        $this->connectDB();
    }

    function connectDB(){
        $this ->link = mysqli_connect("localhost","root","root")
        or die($this -> link = null);
        if(!mysqli_select_db($this->link,"queen")){
            $this ->link = null;
        }

    }


    //查询数据库
    // @param  $tableNmae  要求传string类型的值 表名
    // @param  $col 默认为* 要求传array类型的值  列名
    // @param  $where 默认为""  要求传array类型的值 条件

    function selectDB($tableName,$col = "*",$where = ""){
        //若数据库连接标识符为空则尝试继续连接数据库
        if($this ->link == null){
            $this -> connectDB();
            //return "error";
        }

        //根据传递的数组元素拼接查询的字段
        $cols =  "";
        if($col == "*"){
            $cols = "*";
        }else{
            for($i = 0,$ilen = count($col);$i<$ilen;$i++){
                //最后一个数组元素不拼接逗号
                if($i < $ilen -1){
                    $cols = $cols.$col[$i].",";
                    continue;
                }
                $cols = $cols.$col[$i];
            }
        }

        //根据传递的数组元素拼接查询的条件
        $whereTemp == "";
        if($where == ""){
            $whereTemp == "";
        }else{
            for($i = 0,$ilen = count($where);$i<$ilen;$i++){
                if($i < $ilen -1){
                    $whereTemp = $whereTemp.$where[$i].",";
                    continue;
                }
                $whereTemp = $whereTemp.$where[$i];
            }
        }

        //构建sql语句
        $sql = "";
        if($whereTemp == ""){
            //如果查询条件为空则不加条件
            $sql = "select ".$cols." from ".$tableName;
        }else{
            //有查询条件时加上查询条件
            $sql = "select ".$cols." from ".$tableName." where ".$whereTemp;
        }
        //执行查询语句返回结果集
        $result = mysqli_query($this->link,$sql);
        //关闭数据库
        mysqli_close($this->link);
        //如果刚才查询语句执行错误则返回error,否则返回查询的结果
        if(mysqli_affected_rows($this->link) < 0){
            return "error";
        }else{
            $arr = array();
            //将查询结果存入数组$row中,再将$row添加到$arr数组中并返回
            while($row = mysqli_fetch_row($result)){
                array_push($arr, $row);
            }
            return $arr;
        }
    }
    //插入数据到数据库表中
    //参数一:表名$tableName,字符串
    //参数二:字段名$arrCols,数组
    //参数三:字段值$arrValues,数组
    function insertDB($tableName,$arrCols,$arrValues){
        if($this ->link == null){
            $this -> connectDB();
        }

        //根据数组元素拼接要插入的字段名
        $tempCols = "(";
        for($i = 0,$ilen = count($arrCols);$i<$ilen;$i++){
            if($i < $ilen -1){
                $tempCols = $tempCols.$arrCols[$i].",";
                continue;
            }
            $tempCols = $tempCols.$arrCols[$i];
        }
        $tempCols = $tempCols.")";

        //根据数组元素拼接要插入的字段值
        $tempValues = "(";
        for($i = 0,$ilen = count($arrValues);$i<$ilen;$i++){
            if($i < $ilen -1){
                //如果插入表中的字段值是字符串则直接插入相应字段,否则转换成字符串再插入,最后一个字段值不拼接逗号
                if(is_string($arrValues[$i])){
                    $tempValues = $tempValues."'".$arrValues[$i]."'".",";
                }else{
                    $tempValues = $tempValues.$arrValues[$i].",";
                }
                continue;
            }
            if(is_string($arrValues[$i])){
                $tempValues = $tempValues."'".$arrValues[$i]."'";
            }else{
                $tempValues = $tempValues.$arrValues[$i];
            }
        }
        $tempValues = $tempValues.")";
        //构建sql插入语句并执行该语句
        $sql = "insert into ".$tableName. $tempCols." values".$tempValues;
        mysqli_query($this->link,$sql);
        //如果刚才的插入语句影响的纪录行数大于零,说明插入成功,关闭数据库并返回true,否则返回false
        if(mysqli_affected_rows($this->link) > 0){
            mysqli_close($this->link);
            return true;
        }else{
            mysqli_close($this->link);
            return false;
        }
    }

    //更新数据库纪录
    //参数一:表名$tableName,字符串
    //参数二:字段名$colrows,数组
    //参数三:字段值$values,数组
    //参数四:作为更新依据的某一个特定字段名和字段值$where,字符串
    function updateDB($tableName,$colrows,$values,$where){
        if($this->link == null){
            $this ->connectDB();
        }

        $str = "";
        for($i = 0,$ilen = count($colrows);$i<$ilen;$i++){
            if($i < $ilen -1){
                //根据传递的数组元素拼接将要更新的“字段名=‘新值’”,用逗号分隔;
                if(is_string($values[$i])){
                    //如果新的字段值$values[$i]是字符串,则加上单引号,否则不加
                    $str = $str.$colrows[$i]."="."'".$values[$i]."'".",";
                }else{
                    $str = $str.$colrows[$i]."=".$values[$i].",";
                }
            }else{
                //最后壹个数组元素(即最后一个字段名=‘新值’)结束后不再拼接逗号
                if(is_string($values[$i])){
                    $str = $str.$colrows[$i]."="."'".$values[$i]."'";
                }else{
                    $str = $str.$colrows[$i]."=".$values[$i];
                }
            }
        }
        //构建更新纪录的sql语句,若执行成功并且该更新操作确实影响到数据库表中纪录则返回true,否则返回false
        $sql = "update ".$tableName." set ".$str." where ".$where;
        mysqli_query($this->link,$sql);
        if(mysqli_affected_rows($this->link) >= 0){
            return true;
        }else{
            return false;
        }

    }

    //删除数据库纪录
    function deleteDB($tableName,$where){
        if($this->link == null){
            $this ->connectDB();
        }
        //根据给定字段的键值组合删除表中相关纪录内容,成功返回true,失败返回false
        $sql = "delete from ".$tableName." where ".$where;
        mysqli_query($this->link,$sql);
        if(mysqli_affected_rows($this->link) >= 0){
            return true;
        }else{
            return false;
        }
    }

    //封装一个上传文件后将对应的服务器临时副本拷贝到指定目录的类,文件名为“原始文件名+服务器当前日期时间”格式
    function moveFile($name,$username){
        move_uploaded_file($_FILES[$name]["tmp_name"], "upload/".$username.$_FILES[$name]["name"].date("Y-m-d-h-i-s"));
    }
    //获取客户端通过Ajax提交Form表单的数据类,返回数组
    function getClientData($arr){
        $arrTemp = array();
        for($i = 0,$ilen = count($arr);$i<$ilen;$i++){
            array_push($arrTemp, $_REQUEST[$arr[$i]]);
        }
        return $arrTemp;
    }

}

?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容