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;
    }

}

?>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容