博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开源一个企业官网
阅读量:5773 次
发布时间:2019-06-18

本文共 11022 字,大约阅读时间需要 36 分钟。

对于PHP开发中使用框架还好。如果不是使用MVC框架的话,你如果通过代码来操作插入一条记录,你说说需要几行?? 本人在平时的积累的基础上基于PDO封装了数据库操作类。

DB_HOST, 'username'=>DB_USER, 'password'=>DB_PWD, 'database'=>DB_NAME, 'hostport'=>DB_PORT, 'dbms'=>DB_TYPE, 'dsn'=>DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME ); } if(empty($dbConfig['hostname']))self::throw_exception('没有定义数据库配置,请先定义'); self::$config=$dbConfig; if(empty(self::$config['params']))self::$config['params']=array(); if(!isset(self::$link)){ $configs=self::$config; if(self::$pconnect){ //开启长连接,添加到配置数组中 $configs['params'][constant("PDO::ATTR_PERSISTENT")]=true; } try{ self::$link=new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']); }catch(PDOException $e){ self::throw_exception($e->getMessage()); } if(!self::$link){ self::throw_exception('PDO连接错误'); return false; } self::$link->exec('SET NAMES '.DB_CHARSET); self::$dbVersion=self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION")); self::$connected=true; unset($configs); } } /** * 得到所有记录 * @param string $sql * @return unknown */ public static function getAll($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC")); return $result; } /** * 得到结果集中的一条记录 * @param string $sql * @return mixed */ public static function getRow($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC")); return $result; } /** * 根据主键查找记录 * @param string $tabName * @param int $priId * @param string $fields * @return mixed */ public static function findById($tabName,$priId,$fields='*'){ $sql='SELECT %s FROM %s WHERE id=%d'; return self::getRow(sprintf($sql,self::parseFields($fields),$tabName,$priId)); } /** * 执行普通查询 * @param unknown $tables * @param string $where * @param string $fields * @param string $group * @param string $having * @param string $order * @param string $limit * @return Ambigous
*/ public static function find($tables,$where=null,$fields='*',$group=null,$having=null,$order=null,$limit=null){ $sql='SELECT '.self::parseFields($fields).' FROM '.'`'.$tables.'`' .self::parseWhere($where) .self::parseGroup($group) .self::parseHaving($having) .self::parseOrder($order) .self::parseLimit($limit);// echo $sql; $dataAll=self::getAll($sql);// return count($dataAll)==1?$dataAll[0]:$dataAll; return $dataAll; } /** * 添加记录的操作 * @param array $data * @param string $table * @return Ambigous
*/ public static function add($data,$table){ $keys=array_keys($data); array_walk($keys,array('PdoMySQL','addSpecialChar')); $fieldsStr=join(',',$keys); $values="'".join("','",array_values($data))."'"; $sql="INSERT INTO `{$table}`({$fieldsStr}) VALUES({$values})";// echo $sql; return self::execute($sql); } /** * 更新记录 * @param array $data * @param string $table * @param string $where * @param string $order * @param string $limit * @return Ambigous
*/ public static function update($data,$table,$where=null,$order=null,$limit=0){ foreach($data as $key=>$val){ $sets.="`".$key."`='".$val."',"; } $sets=rtrim($sets,','); $sql="UPDATE {$table} SET {$sets} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);// echo $sql; return self::execute($sql); } /** * 删除记录的操作 * @param string $table * @param string $where * @param string $order * @param number $limit * @return Ambigous
*/ public static function delete($table,$where=null,$order=null,$limit=0){ $sql="DELETE FROM `{$table}` ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit); return self::execute($sql); } /** * */ public static function truncate($table){ $sql="TRUNCATE TABLE `{$table}` "; return self::execute($sql); } /** * 得到最后执行的SQL语句 * @return boolean|Ambigous
*/ public static function getLastSql(){ $link=self::$link; if(!$link)return false; return self::$queryStr; } /** * 得到上一步插入操作产生AUTO_INCREMENT * @return boolean|string */ public static function getLastInsertId(){ $link=self::$link; if(!$link)return false; return self::$lastInsertId; } /** * 得到数据库的版本 * @return boolean|mixed */ public static function getDbVerion(){ $link=self::$link; if(!$link)return false; return self::$dbVersion; } /** * 得到数据库中数据表 * @return multitype:mixed */ public static function showTables(){ $tables=array(); if(self::query("SHOW TABLES")){ $result=self::getAll(); foreach($result as $key=>$val){ $tables[$key]=current($val); } } return $tables; } /** * 解析Where条件 * @param unknown $where * @return string */ public static function parseWhere($where){ $whereStr=''; if(is_string($where)&&!empty($where)){ $whereStr=$where; } return empty($whereStr)?'':' WHERE '.$whereStr; } /** * 解析group by * @param unknown $group * @return string */ public static function parseGroup($group){ $groupStr=''; if(is_array($group)){ $groupStr.=' GROUP BY '.implode(',',$group); }elseif(is_string($group)&&!empty($group)){ $groupStr.=' GROUP BY '.$group; } return empty($groupStr)?'':$groupStr; } /** * 对分组结果通过Having子句进行二次删选 * @param unknown $having * @return string */ public static function parseHaving($having){ $havingStr=''; if(is_string($having)&&!empty($having)){ $havingStr.=' HAVING '.$having; } return $havingStr; } /** * 解析Order by * @param unknown $order * @return string */ public static function parseOrder($order){ $orderStr=''; if(is_array($order)){ $orderStr.=' ORDER BY '.join(',',$order); }elseif(is_string($order)&&!empty($order)){ $orderStr.=' ORDER BY '.$order; } return $orderStr; } /** * 解析限制显示条数limit * limit 3 * limit 0,3 * @param unknown $limit * @return unknown */ public static function parseLimit($limit){ $limitStr=''; if(is_array($limit)){ if(count($limit)>1){ $limitStr.=' LIMIT '.$limit[0].','.$limit[1]; }else{ $limitStr.=' LIMIT '.$limit[0]; } }elseif(is_string($limit)&&!empty($limit)){ $limitStr.=' LIMIT '.$limit; } return $limitStr; } /** * 解析字段 * @param unknown $fields * @return string */ public static function parseFields($fields){ if(is_array($fields)){ array_walk($fields,array('PdoMySQL','addSpecialChar')); $fieldsStr=implode(',',$fields); }elseif(is_string($fields)&&!empty($fields)){ if(strpos($fields,'`')===false){ $fields=explode(',',$fields); array_walk($fields,array('PdoMySQL','addSpecialChar')); $fieldsStr=implode(',',$fields); }else{ $fieldsStr=$fields; } }else{ $fieldsStr='*'; } return $fieldsStr; } /** * 通过反引号引用字段, * @param unknown $value * @return string */ public static function addSpecialChar(&$value){ if($value==='*'||strpos($value,'.')!==false||strpos($value,'`')!==false){ //不用做处理 }elseif(strpos($value,'`')===false){ $value='`'.trim($value).'`'; } return $value; } /** * 执行增删改操作,返回受影响的记录的条数 * @param string $sql * @return boolean|unknown */ public static function execute($sql=null){ $link=self::$link; if(!$link) return false; self::$queryStr=$sql; if(!empty(self::$PDOStatement))self::free(); $result=$link->exec(self::$queryStr); self::haveErrorThrowException(); if($result || $result==0){ self::$lastInsertId=$link->lastInsertId(); self::$numRows=$result; return self::$numRows; }else{ return false; } } /** 释放结果集 */ public static function free(){ self::$PDOStatement=null; } public static function query($sql=''){ $link=self::$link; if(!$link) return false; //判断之前是否有结果集,如果有的话,释放结果集 if(!empty(self::$PDOStatement))self::free(); self::$queryStr=$sql; self::$PDOStatement=$link->prepare(self::$queryStr); $res=self::$PDOStatement->execute(); self::haveErrorThrowException(); return $res; } public static function haveErrorThrowException(){ $obj=empty(self::$PDOStatement)?self::$link: self::$PDOStatement; $arrError=$obj->errorInfo(); //print_r($arrError); if($arrError[0]!='00000'){ self::$error='SQLSTATE: '.$arrError[0].'
SQL Error: '.$arrError[2].'
Error SQL:'.self::$queryStr; self::throw_exception(self::$error); return false; } if(self::$queryStr==''){ self::throw_exception('没有执行SQL语句'); return false; } } /** * 自定义错误处理 * @param unknown $errMsg */ public static function throw_exception($errMsg){ echo '
'.$errMsg.'
'; } /** * 销毁连接对象,关闭数据库 */ public static function close(){ self::$link=null; } public static function search($table1,$table2,$table3){ $PdoMySQL=new PdoMySQL(); $sql1="select * from ".$table1." where status='0'"; $sql2="select * from ".$table2." where status='0'"; $sql3="select * from ".$table3." where status='0'"; $stmt1=$PdoMySQL->prepare($sql1); $stmt2=$PdoMySQL->prepare($sql2); $stmt3=$PdoMySQL->prepare($sql3); $stmt1->execute(); $stmt2->execute(); $stmt3->execute(); //echo $username.'

'.$password; $row1=$stmt1->fetch(); echo $row1[0]; }}?>复制代码

最后还有一个超级大BOSS,一个公司企业官网,功能强大,有接口封装类、图片上传(单图、多图)、前端 Bootstrap、REST风格的接口。

企业官方网站Pro版

转载地址:http://ehaux.baihongyu.com/

你可能感兴趣的文章
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
软件开发学习的5大技巧,你知道吗?
查看>>
java入门第二季--封装--什么是java中的封装
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>