[笔记,PHP,PDO]常用方法封装

将资料库常用的方法打包起来~

这支没打包的很好~
只时间会回头进行重构,
不知有无更好的idea,
有的话请不令啬告知,
感恩

直接上code

/** PDO连线资料库的通用 * @version 0.0.3 2020/07/16 新增init(PDO)使$db可以选择直接外部带入 * @version 0.0.2 加入资料库DB操作 查询、新增、删除,连线直接使用全域$db,或许未来可以改名为PdoHelper或DbHelper * @version 0.0.1 新增BindValueWithDataTypes,方便PDO插入含有null的参数 */class PdoService{private static $db = null;/** 设定PDO */public static function init(PDO $pdo){    self::$db = $pdo;}public static function isInit(){    return self::$db != null;}/** 建立PDO */public static function PdoNewConnect($HOST='',$DBNAME='',$USER='',$PASSWD=''){        global $host,$db_name,$name,$pass;        if(empty($HOST) && empty($DBNAME) && empty($USER) && empty($PASSWD)){            $HOST = $host;            $DBNAME = $db_name;            $USER = $name;            $PASSWD = $pass;        }        $db = new PDO("mysql:dbname=$DBNAME;host=$HOST;", $USER, $PASSWD,            array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));        $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 增加安全性与速度        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); // 方便测试 ERRMODE_EXCEPTION         return $db;}/** 建立/取得PDO */public static function PDOConnect($HOST='', $DBNAME='', $USER='', $PASSWD=''){        global $db; // PDO        self::$db = $db ?: self::PdoNewConnect($HOST, $DBNAME, $USER, $PASSWD);        return self::$db;}public static function SqlQuery($sql, $params = [], $PDO_FETCH = PDO::FETCH_OBJ){    $db = self::PDOConnect(); // 连线    $query = $db->prepare($sql);    self::BindValueWithDataTypes($query,$params);    // 设定参数    $query->execute();  // 执行    $data = $query->fetchAll($PDO_FETCH) ?: array(); // 捞取全部内容    return $data;}/** PDO插入含有null的参数  * 格式1 $param=[ ['name'=>':pid','value'=>null], ... ]; * 格式2 $param=[ ':key'=>'value',':key'=>null, ... ]; */public static function BindValueWithDataTypes(PDOStatement $sth, array $params){        //可能格式 $param=[ ['name'=>':pid','value'=>null], ... ]        //可能格式 $param=[ ':key'=>'value','key'=>null, ... ]        foreach ($params as $key => $param) {            //格式判断            //格式 $param=[ ['name'=>':pid','value'=>null], ... ]            if (is_array($param)) {                if (!is_null($param['value']))                    $sth->bindValue($param['name'], $param['value']);                else                    $sth->bindValue($param['name'], null, PDO::PARAM_NULL);            } else {                //格式 $param=[ 'key'=>'value','key'=>null, ... ]                if (!is_null($param))                    $sth->bindValue($key, $param);                else                    $sth->bindValue($key, null, PDO::PARAM_NULL);            }        }}public static function Insert($table,array $data){    $db = self::PDOConnect();    $sqlFields=[];    $sqlValues=[];    $sqlParams=[];    foreach ($data as $key => $value) {        if($key=='') continue;        $sqlFields[]=$key;        // 判断该栏位值是一般栏位还是sql陈述句        if(strtoupper(substr($value,0,7))!='(SELECT'){            // 一般栏位            $sqlValues[]=":$key";            $sqlParams[":$key"]=$value;        }else{            // sql陈述句            $sqlValues[]=$value;        }    }    $sql='insert into '.$table.'('.join(',',$sqlFields).')values('.join(',',$sqlValues).')';    $query = $db->prepare($sql);    PdoService::BindValueWithDataTypes($query,$sqlParams);    return $query->execute();}public static function Delete($table,array $where){        $db = self::PDOConnect();        $sqlValues=[];        $sqlParams=[];        foreach ($where as $key => $value) {            if($key=='') continue;            // 判断该栏位值是一般栏位还是sql陈述句            if(strtoupper(substr($value,0,7))!='(SELECT'){                // 一般栏位                $sqlValues[]="$key = :$key";                $sqlParams[":$key"]=$value;            }else{                // sql陈述句                $sqlValues[]=$value;            }        }        $sql = "DELETE FROM $table ";        if(count($sqlValues))            $sql .=' where '.join(' and ',$sqlValues);        $sth = $db->prepare($sql);        return $sth->execute($sqlParams);}public static function Update($table,array $data, $where=[]){        $db = self::PDOConnect();                $sqlData=[];        $sqlWhere=[];        $sqlParams=[];        foreach ($data as $key => $value) {            if($key=='') continue;            // 判断该栏位值是一般栏位还是sql陈述句            if(strtoupper(substr($value,0,7))!='(SELECT'){                // 一般栏位                $sqlData[]="`$key`=:$key";                $sqlParams[":$key"]=$value;            }else{                // sql陈述句                $sqlData[]="`$key`=$value";            }        }        foreach ($where as $key => $value) {            if($key=='') continue;            // 判断该栏位值是一般栏位还是sql陈述句            // TODO:可改用正则改写            if (empty($value) && !empty($key)) {                $sqlWhere[] = $key;            } else if(is_array($value)) {                $sqlWhere[] = "`$key`IN('" . join("','", $value) . "')";            } else if(in_array(strtoupper(substr($value,0,1)), ['(', '<', '>', '='])                 || strtoupper(substr($value,0,4)) =='LIKE '){                // 一般栏位                $sqlWhere[] = "`$key`=:$key";                $sqlParams[":$key"] = $value;            }else{                // sql陈述句                $sqlWhere[] = "`$key`=$value";            }        }        $sql="UPDATE $table SET " . join(' , ',$sqlData) . (count($sqlWhere)>0 ? " WHERE ". join(' AND ',$sqlWhere) : '' ) ;        $sth = $db->prepare($sql);        return $sth->execute($sqlParams);}}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章