• php封装pdo操作数据的工具类


    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    class PdoMysql{
    	public static $config = array();//设置连接参数,配置信息
    	public static $link = null;//保存连接标识符
    	public static $pconnect = false;//是否开启长连接
    	public static $dbVersion = null;//保存数据库版本
    	public static $connected = false;//判断是否连接成功
    	public static $PDOStatement = null;//保证PDOStatement对象
    	public static $queryStr = null;//保存最后执行的操作
    	public static $error = null;//保存错误信息
    	public static $lastInsertId = null;//保存上一步插入操作保存的AUTO_INCREMANT
    	public static $numRows = null;//受影响记录的条数
    
    	/**
    	 * 构造函数,连接数据库
    	 *
    	 * @param      array|string  $dbConfig  The database configuration
    	 *
    	 * @return     boolean       ( description_of_the_return_value )
    	 */
    	public function __construct($dbConfig=''){
    		if(!class_exists("PDO")){
    			self::throw_exception("不支持PDO,请先开启");
    		}
    		if(!is_array($dbConfig)){
    			$dbConfig = array(
    							'hostname' => 'localhost',
    							'username' => 'root',
    							'password' => '1234',
    							'database' => 'test',
    							'hostport' => '3306',
    							'dbms' 	   => 'mysql',
    							'dsn'	   => 'mysql:host=localhost;dbname=test'
    						);
    		}
    		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 utf8");
    			self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
    			unset($configs);
    		}
    	}
    
    	/**
    	 * 得到所有记录
    	 *
    	 * @param      <type>  $sql    The sql
    	 *
    	 * @return     <type>  All.
    	 */
    	public static function getAll($sql=null){
    		if($sql!=null){
    			self::query($sql);
    		}
    		$result = self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC"));
    		return $result;
    	}
    
    	/**
    	 * 得到一条记录
    	 *
    	 * @param      <type>  $sql    The sql
    	 *
    	 * @return     <type>  The row.
    	 */
    	public static function getRow($sql=null){
    		if($sql!=null){
    			self::query($sql);
    		}
    		$result = self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC"));
    		return $result;
    	}
    
    	/**
    	 * 执行增删改操作,返回受影响记录的条数
    	 *
    	 * @param      <type>   $sql    The sql
    	 *
    	 * @return     boolean  ( description_of_the_return_value )
    	 */
    	public static function execute($sql=null){
    		$link = self::$link;
    		if(!$link)return false;
    		if($sql!=null){
    			self::$queryStr = $sql;
    		}
    		if(!empty(self::$PDOStatement))self::free();
    		$result = $link->exec(self::$queryStr);
    		self::haveErrorThrowException();
    		if($result){
    			self::$lastInsertId = $link->lastInsertId();
    			self::$numRows = $result;
    			return $result;
    		}else{
    			return false;
    		}
    	}
    
    	/**
    	 * 根据主键查找记录
    	 *
    	 * @param      <type>  $tabName  The tab name
    	 * @param      <type>  $priId    The pri identifier
    	 * @param      string  $fields   The fields
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	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      <type>  $tables  The tables
    	 * @param      <type>  $where   The where
    	 * @param      string  $fields  The fields
    	 * @param      <type>  $group   The group
    	 * @param      <type>  $having  The having
    	 * @param      <type>  $order   The order
    	 * @param      <type>  $limit   The limit
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	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);
    		$data = self::getAll($sql);
    		return $data;
    	}
    
    	/**
    	 * 添加记录
    	 *
    	 * @param      <type>  $data   The data
    	 * @param      <type>  $table  The table
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	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 {$table}({$fieldsStr}) VALUES({$values})";
    		return self::execute($sql);
    	}
    
    	/**
    	 * 更新数据
    	 *
    	 * @param      <type>  $data   The data
    	 * @param      <type>  $table  The table
    	 * @param      <type>  $where  The where
    	 * @param      <type>  $order  The order
    	 * @param      <type>  $limit  The limit
    	 */
    	public static function update($data,$table,$where=null,$order=null,$limit=null){
    		$sets = '';
    		foreach ($data as $key => $value) {
    			$sets .= $key."='".$value."',";
    		}
    		$sets = rtrim($sets,',');
    		$sql = "UPDATE {$table} SET {$sets}".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
    		echo $sql;
    	}
    
    	/**
    	 * 删除数据
    	 *
    	 * @param      <type>  $data   The data
    	 * @param      <type>  $table  The table
    	 * @param      <type>  $where  The where
    	 * @param      <type>  $order  The order
    	 * @param      <type>  $limit  The limit
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function delete($table,$where=null,$order=null,$limit=null){
    		$sql = "DELETE FROM {$table} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
    		return self::execute($sql);
    	}
    
    	
    	/**
    	 * 执行查询
    	 *
    	 * @param      string   $sql    The sql
    	 *
    	 * @return     boolean  ( description_of_the_return_value )
    	 */
    	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;
    	}
    
    	/**
    	 * 获取最后执行的sql
    	 *
    	 * @return     boolean  The last sql.
    	 */
    	public static function getLastSql(){
    		$link = self::$link;
    		if(!$link){
    			return false;
    		}
    		return self::$queryStr;
    	}
    
    	/**
    	 * 获取最后插入的ID
    	 *
    	 * @return     boolean  The last insert identifier.
    	 */
    	public static function getLastInsertId(){
    		$link = self::$link;
    		if(!$link){
    			return false;
    		}
    		return self::$lastInsertId;
    	}
    
    	/**
    	 * 获得数据库的版本
    	 *
    	 * @return     boolean  The database version.
    	 */
    	public static function getDbVersion(){
    		$link = self::$link;
    		if(!$link){
    			return false;
    		}
    		return self::$dbVersion;
    	}
    
    	/**
    	 * 得到数据库中表
    	 *
    	 * @return     array  ( description_of_the_return_value )
    	 */
    	public static function showTables(){
    		$tables = array();
    		if(self::query("show tables")){
    			$result = self::getAll();
    			foreach ($result as $key => $value) {
    				$tables[$key] = current($value);
    			}
    		}
    		return $tables;
    	}
    
    	/**
    	 * 解析where条件
    	 *
    	 * @param      <type>  $where  The where
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function parseWhere($where){
    		$whereStr = '';
    		if(is_string($where)&&!empty($where)){
    			$whereStr = $where;
    		}
    		return empty($whereStr) ? '' : ' WHERE '.$whereStr;
    	}
    
    	/**
    	 * 解析group
    	 *
    	 * @param      <type>  $group  The group
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function parseGroup($group){
    		$groupStr = '';
    		if(is_array($group)){
    			$groupStr = implode(',', $group);
    		}elseif(is_string($group)&&!empty($group)){
    			$groupStr = $group;
    		}
    		return empty($groupStr) ? '' : ' GROUP BY '.$groupStr;
    	}
    
    	/**
    	 * 解析having
    	 *
    	 * @param      <type>  $having  The having
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function parseHaving($having){
    		$havingStr = '';
    		if(is_string($having)&&!empty($having)){
    			$havingStr = $having;
    		}
    		return empty($havingStr) ? '' : ' HAVING '.$havingStr;
    	}
    
    	/**
    	 * 解析order
    	 *
    	 * @param      <type>  $order  The order
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function parseOrder($order){
    		$orderStr = '';
    		if(is_string($order)&&!empty($order)){
    			$orderStr = $order;
    		}
    		return empty($orderStr) ? '' : ' ORDER BY '.$orderStr;
    	}
    
    	/**
    	 * 解析limit
    	 *
    	 * @param      <type>  $limit  The limit
    	 *
    	 * @return     <type>  ( description_of_the_return_value )
    	 */
    	public static function parseLimit($limit){
    		$limitStr = '';
    		if(is_array($limit)){
    			$limitStr = implode(',', $limit);
    		}elseif(is_string($limit)&&!empty($limit)){
    			$limitStr = $limit;
    		}
    		return empty($limitStr) ? '' : ' LIMIT '.$limitStr;
    	}
    
    	/**
    	 * 解析字段
    	 *
    	 * @param      <type>  $fields  The fields
    	 *
    	 * @return     string  ( description_of_the_return_value )
    	 */
    	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      string  $value  The value
    	 *
    	 * @return     string  ( description_of_the_return_value )
    	 */
    	public static function addSpecialChar(&$value){
    		if($value==="*"||strpos($value,'.')!==false||strpos($value,'`')!==false){
    			//不用做处理
    		}elseif(strpos($value, '`')===false){
    			$value = '`'.trim($value).'`';
    		}
    		return $value;
    	}
    
    	/**
    	 * 释放结果集
    	 */
    	public static function free(){
    		self::$PDOStatement = null;
    	}
    
    	/**
    	 * 抛出错误信息
    	 *
    	 * @return     boolean  ( description_of_the_return_value )
    	 */
    	public static function haveErrorThrowException(){
    		$obj = empty(self::$PDOStatement) ? self::$link : self::$PDOStatement;
    		$arrError = $obj->errorInfo();
    		if($arrError[0]!='00000'){
    			self::$error = 'SQLSTATE=>'.$arrError[0].'<br/>SQL Error=>'.$arrError[2].'<br/>Error SQL=>'.self::$queryStr;
    			self::throw_exception(self::$error);
    			return false;
    		}
    		if(self::$queryStr==''){
    			self::throw_exception('没有执行SQL语句');
    			return false;
    		}
    	}
    
    	/**
    	 * 自定义错误处理
    	 *
    	 * @param      <type>  $errMsg  The error message
    	 */
    	public static function throw_exception($errMsg){
    		echo $errMsg;
    	}
    
    	/**
    	 * 销毁连接对象,关闭数据库
    	 */
    	public static function close(){
    		self::$link = null;
    	}
    }
    $pdo = new PdoMysql();
    var_dump($pdo->showTables());
    

      

  • 相关阅读:
    圈水池 nyoj 78 凸包算法
    凸包算法入门
    nyoj 633 幂
    软件下载地址
    概率论与数理统计
    迷宫最短路径 问题
    将项目发布至开发环境测试环境的方法
    一些JavaScript技巧
    随机生成10个不重复的0-100的数字
    Git添加远程库和从远程库中获取(新手傻瓜式教学)
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/6665228.html
Copyright © 2020-2023  润新知