PHP封装MySQLi数据库操作类

2017-07-11  本文已影响176人  幻凌风
<?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;
    }

}

?>
上一篇下一篇

猜你喜欢

热点阅读