php对mysqli的小封装

<?php

class MysqliCommon {

    private $mysqli; //内部建立mysqli对象
    private $dbErrorFile = ‘‘; //错误日志文件

    /**
     * 
     * @param array $dbConfi  
     * 类似于array("host"=>"127.0.0.1","dbname"=>"dilicms2","user"=>"root","password"=>"123qwe")
     * @param type $dbErrorFile
     */

    public function __construct($dbConfi, $dbErrorFile = ‘‘, $charSet = ‘utf8‘) {
        $this->mysqli = @new mysqli($dbConfi[‘host‘], $dbConfi[‘user‘], $dbConfi[‘password‘], $dbConfi[‘dbname‘]);
        $this->dbErrorFile = $dbErrorFile;
        if ($this->mysqli->connect_errno) {
            $connectErrorMsg = date(‘Y-m-d H:i:s‘, time()) . ">>> Connection failed: " . mb_convert_encoding($this->mysqli->connect_error, ‘UTF-8‘, ‘GBK‘) . "\r\n";
            $this->writeErrorLog($connectErrorMsg);
            exit();
        }
        //设置访问数据库的字符集
        $this->mysqli->query(‘set names ‘ . $charSet);
    }

    /**
     * 向错误日志文件中记录错误日志
     * @param string $errorMsg
     */
    public function writeErrorLog($errorMsg = ‘‘) {
        $this->dbErrorFile;
        if ($this->dbErrorFile != ‘‘) {
            $EMsg = "";
            if ($errorMsg != ‘‘) {
                $EMsg = $errorMsg;
            } else {
                $EMsg = date(‘Y-m-d H:i:s‘, time()) . ">>> Connection failed: " . mb_convert_encoding($this->mysqli->error, ‘UTF-8‘, ‘GBK‘) . "\r\n";
            }
            file_put_contents($this->dbErrorFile, $EMsg, FILE_APPEND);
        }
    }

    /**
     * 根据表名 字段 条件 选项 查询数据库数据
     * @param string $table //表名
     * @param array $fields //字段数组
     * @param array $wheres //条件数组
     * @param array $options //可选数据组
     */
    public function seach($table, $fields, $wheres, $options = array()) {
        $sql = ‘SELECT ‘ . implode($fields, ", ") . ‘ FROM ‘ . $table . ‘ WHERE 1=1 ‘;
        $wheresSql = $this->dealWhere($wheres);
        $sql = $sql . $wheresSql;
        if (isset($options[‘limit‘])) {
            $sql.=‘ LIMIT ‘ . $options[‘limit‘];
        }
        return $this->run($sql);
    }

    /**
     * 执行SQl语句
     * @param string $sql 
     * @return mixed
     */
    private function run($sql) {
        $result = $this->mysqli->query($sql);
        if (!$result) {
            $this->writeErrorLog();
            return false;
        }
        if (preg_match("/^(" . implode("|", array("select", "describe", "pragma")) . ") /i", $sql)) {
            $resultArray = array();
            if ($result->num_rows > 0) {
                while ($row = $result->fetch_array()) {
                    $resultArray[] = $row;
                }
            }
            $result->free();
            return $resultArray;
        } elseif (preg_match("/^(" . implode("|", array("delete", "insert", "update")) . ") /i", $sql)) {
            return $this->mysqli->affected_rows;
        }
        return false;
    }

    /**
     * 处理查询条件
     * @param array $wheres
     * @return string
     */
    public function dealWhere($wheres) {
        $wheresSql = ‘‘;
        foreach ($wheres as $key => $value) {
            $cond = preg_replace("/\s+/", " ", $key);
            $fieldWh = explode(‘ ‘, trim($cond));
            if (count($fieldWh) == 1) {
                $wheresSql .=‘ AND ‘ . $cond . ‘=‘ . (is_string($value) ? ‘ "‘ . $value . ‘" ‘ : $value . ‘ ‘);
            } else if (count($fieldWh) == 2) {
                $conStr = trim(strtoupper($fieldWh[0]));
                if ($conStr == ‘OR‘) {
                    $wheresSql .=‘ OR ‘ . $cond . ‘=‘ . (is_string($value) ? ‘ "‘ . $value . ‘" ‘ : $value . ‘ ‘);
                } else {
                    $wheresSql.=‘ AND ‘ . $fieldWh[0] . ‘ ‘ . $fieldWh[1] . (is_string($value) ? ‘ "‘ . $value . ‘" ‘ : $value . ‘ ‘);
                }
            } else if (count($fieldWh) == 3) {
                $conStr = trim(strtoupper($fieldWh[0]));
                if ($conStr == ‘OR‘) {
                    $wheresSql.=‘ OR ‘ . $fieldWh[0] . ‘ ‘ . $fieldWh[1] . (is_string($value) ? ‘ "‘ . $value . ‘" ‘ : $value . ‘ ‘);
                }
            }
        }
        return $wheresSql;
    }

    /**
     * 开启事务
     */
    public function beginTransaction() {
        $this->mysqli->autocommit(false);
    }

    /**
     * 结束事务
     * @return boolean
     */
    public function complectTransaction() {
        if (!$this->mysqli->errno) {
            $this->mysqli->commit();
            return true;
        } else {
            $this->mysqli->rollback();
            $this->writeErrorLog();
        }
        return false;
    }

    public function insert($table, $values) {
        $sql = "INSERT INTO " . $table . " ";
        $columns = "";
        $columnsVal = "";
        foreach ($values as $key => $value) {
            $columns .= $key . ‘,‘;
            $columnsVal.=(is_string($value) ? ‘ "‘ . $this->mysqli->real_escape_string($value) . ‘",‘ : $value . ‘,‘);
        }
        $sql = $sql . "(" . substr($columns, 0, strlen($columns) - 1) . ") VALUES (" . substr($columnsVal, 0, strlen($columnsVal) - 1) . ")";

        return $this->run($sql);
    }

    public function doClose() {
        $this->mysqli->close();
        unset($this->mysqli);
    }

    public function delete($table, $wheres) {
        $sql = "DELETE FROM " . $table . ‘ WHERE 1=1 ‘;
        $wheresSql = $this->dealWhere($wheres);
        $sql = $sql . $wheresSql;
        return $this->run($sql);
    }

    public function update($table, $values, $wheres) {
        $sql = "UPDATE " . $table . " SET ";
        $count = 0;
        foreach ($values as $key => $value) {
            if ($count > 0) {
                $sql .= ", ";
            }
            $count++;
            $sql .= $key . " = " . (is_string($value) ? ‘ "‘ . $this->mysqli->real_escape_string($value) . ‘" ‘ : $value . ‘ ‘);
        }

        $sql2 = ‘ WHERE 1=1 ‘;
        $wheresSql = $this->dealWhere($wheres);
        $sql2 = $sql2 . $wheresSql;

        $sql = $sql . $sql2;
        return $this->run($sql);
    }

}
时间: 2024-10-23 01:37:51

php对mysqli的小封装的相关文章

mysqli 对象风格封装

<?php/* $obj=new obj(param...)$obj->set_charset()$obj->connect_errno$obj->connect_error $obj->query()$obj->errno$obj->error $result=$obj->query(); //mysqli_result对象$result->fetch_all()$result->fetch_array() $obj->close() *

vue-ajax小封装

1. js 文件: /** ajax封装:* 1. 引入文件* 2. new Vue().ajax.get(url,data,fn,ojson), 或 new Vue().ajax.post(url,data,fn,ojson)* url: 需要获取数据的文件地址 (string)* data: 需要发送的信息 (可省略) (obj)* fn: 获取信息后的回调函数,接收到的返回值为data (function)* ojson: 是否需要转换为json格式 (可省略) (设置为 "json&qu

整理的有用的一些EF的CommonDAL小封装

CommonDAL封装: using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using YX.Model; namespace YX.BLL { /// <summary> /// 基础 dal 类 T 对应数据泛型 /// </summary> p

HT1621B兼容TM1621D替代1621C取代VK1621更少脚位点数小封装

LCD/LED液晶控制器及驱动器系列芯片简介如下:RAM映射LCD控制器和驱动器系列VK1024B 2.4V-5.2V 6seg4com 63 62 偏置电压1/2 1/3 S0P-16VK1056B 2.4V-5.2V 14seg4com 143 142 偏置电压1/2 1/3 SOP-24/SSOP-24 VK1072B 2.4V-5.2V 18seg4com 183 182 偏置电压1/2 1/3 SOP-28VK1072C 2.4V-5.2V 18seg4com 183 182 偏置电压

as3.0 中对TextField的小封装,使其成为一个还不错的输入框

package myComponent  { import flash.display.Shape; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; import flash.text.TextLineMetrics; public class MyInput extends Sprite { priva

javascript小实例,实现99乘法表及隔行变色

人生短暂,废话不多说,直奔主题! 这个小实例的要求: 实现在页面中输出99乘法表.(要求:以每三行为一组,实现隔行变色(颜色为白,红,黄(也可自己定义)),鼠标滑过每一行,行背景颜色变为蓝色,鼠标离开又恢复原来的颜色),隔行变色的效果需要用if和switch两种判断方式都能实现: 额,分析一下实例要求:一个99乘法表,一个多方法的隔行变色,鼠标滑过变另外一个颜色,离开恢复原色.  嗯,我们一步步来吧! 99乘法表的实现,我相信很多人都知道怎么实现,无非是2个for循环得到的结果,这里我就不多做解

PHP连接数据库(mysqli)

mysqli 我们在PHP中可以使用mysqli扩展与MySQL数据库信息交流,i表示改进,增强,它 执行速度更快.mysqli扩展被封装到一个类中,它是一种面向对象的技术,不过 喜欢过程化编程的用户也不用担心,mysqli也提供了一个面向过程的接口,我们 可以像调用函数那样去使用mysqli扩展,所以我们现在学习mysqli扩展相当于就 是学习它提供给我们的一些函数! 1.建立.关闭与MySQL服务器的连接 2.执行SQL语句 3.预处理语句机制 几个函数 1)连接指定的mysql服务器 [e

供应8223LC蓝牙耳机专用DFN封装触摸IC

产品概述:8223LC是一款采用DFN超小封装的单按键触摸芯片,此触摸芯片内建稳压电路,提供稳定的电压给触摸感应电路使用,稳定的触摸检测效果可以广泛的满足不同应用的需求,此触摸检测芯片是专为取代传统按键而设计,触摸检测PAD的大小可依不同的灵敏度设计在合理的范围内,低功耗与宽工作电压,此触摸芯片非常适用于PCB空间有限,对元器件封装有要求的产品,如蓝牙耳机.智能穿戴.指纹锁等. 产品特性:1 工作电压:2.0V 至 5.5V2 内建稳压电路提供稳定的电压给触摸检电路使用3 工作电流:低功耗模式下

DFN-6封装单键触摸检测IC

产品概述:8323是两款采用DFN超小封装的单按键触摸芯片,此触摸芯片内建稳压电路,提供稳定的电压给触摸感应电路使用,稳定的触摸检测效果可以广泛的满足不同应用的需求,此触摸检测芯片是专为取代传统按键而设计,触摸检测PAD的大小可依不同的灵敏度设计在合理的范围内,低功耗与宽工作电压,此触摸芯片非常适用于PCB空间有限,对元器件封装有要求的产品,如蓝牙耳机.智能穿戴.指纹锁等. DFN-6 2*2封装单通道触摸按键芯片8323现已经批量出货,大量库存,欢迎选购! 产品特性:1 工作电压:2.0V 至