Mysql PDO基础操作

老墨君_9366

老墨君_9366

2016-05-23

1508人浏览

原创


tableKey = $tableKey;
	}
	/**
	 * 获取库文件信息
	 * 
	*/
	public function getConfig()
	{
		if( ! isset($this->tableKey) )
		{
			throw new QException('当前操作表不存在');
		}
		$dbconfig = $this->DbConfig();
		require($dbconfig);
		$this->configFile = $tbl[$this->tableKey];
		if( !isset( $this->configFile )) 
		{
			throw new QException('当前操作表配置不存在'.$this->tableKey);
		}
	}
	
	/**
	 * 数据库链接
	 * 
	 */
	public function init()
	{
		$this->getConfig();
		if( ! file_exists($this->configFile['configFile']) )
		{
			throw new QException('当前链接配置不存在'.$this->configFile['configFile']);
		}
		require $this->configFile['configFile'];
		try {
			$this->pdo =  new PDO(
				$dsn,
				$user,
				$password, 
				array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ".$encode,PDO::FETCH_ASSOC=>true));
		    //$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); //php预处理错误
		} catch (Exception $e) {
			
			exit('数据库连接失败,错误信息:'. $e->getMessage());
		}
	}
	
	/**
	 * 表组合
	 * 
	 */
	private function tablePrefix()
	{
		$this->getConfig();
		return $this->configFile['tablePrefix'].$this->tableKey;
	}
	
	/**
	 * sql执行
	 * 
	 * @param string $sql
	 */
	private function query( $sql ) 
	{
		$this->init();
		return $this->pdo->query($sql);
	}
	
	/**
	 * 反回执行受影响行数
	 * 
	 * 适合于 插入 、修改
	 * @param string $sql
	 */
	private function exec( $sql )
	{
		$this->init();
		return $this->pdo->exec($sql);
	}
	
	/**
	 * 获取一条数据
	 *
	 * @access	public
	 * @param	string	$tableKey	数据表标识
	 * @param	array	$rule		数据查询规则
	 * @return	array
	 */
	public function findOne( $param )
	{
		$param  = $this->combined( $param );
		$where = !empty($param['where']) ? ' WHERE '.$param['where'] :  ' '.$param['limit'] ;
		$sql    = 'SELECT '.$param['col'].' FROM `'.$this->tablePrefix().'`'.$where.' LIMIT 1';
		return $this->query($sql)->fetch();
	}

	/**
	 * 获取多条数据
	 *
	 * @access	public
	 * @param	string	$tableKey	数据表标识
	 * @param	array	$rule		数据查询规则
	 * @return	array
	 */
	public function find( $param )
	{
		$param = $this->combined( $param );

		$where = !empty($param['in']) ? ' WHERE '.$param['in'] :  ' '.$param['limit'] ;
		$sql   = 'SELECT '.$param['col'].' FROM `'.$this->tablePrefix().'`'.$where;
		
		return $this->query($sql)->fetchAll();
	}
	
	/**
	 * 获取多条数据(数据分页时用)
	 *
	 * @access	public
	 * @param	string	$tableKey	数据表标识
	 * @param	array	$rule		数据查询规则
	 * @return	array
	 */
	public function findAll($param)
	{
	
	}

	/**
	 * 统计数据
	 *
	 * @access	public
	 * @param	string	$tableKey	数据表标识
	 * @param	array	$rule		数据查询规则
	 * @return	int
	 */
	public function count($param)
	{
		$param = $this->combined( $param );
		
		$sql = 'SELECT COUNT('.$param['count'].') AS total FROM `'.$this->tablePrefix().'` WHERE '.$param['where'];
		
		return $this->query($sql)->fetch();
	}
	
	/**
	 * 创建一条数据
	 *
	 * @access	public
	 * @param	array	$param		数据创建规则
	 * @return	int     0失败、大于0成功
	 */
	public function create($param)
	{
		$sql = 'INSERT INTO `'.$this->tablePrefix().'` '.$this->deal($param).';';
		
		return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
	}
	
	/**
	 * 修改数据
	 *
	 * @access	public
	 * @param	string	$tableKey	数据表标识
	 * @param	array	$data		数据信息[键值对]
	 * @param	array	$rule		数据修改规则
	 * @return	bool
	 */
	public function modify($param)
	{
		$param = $this->combined( $param );
		
		$sql   = 'UPDATE `'.$this->tablePrefix().'` SET '.$param['set'].' WHERE '.$param['where'].';';
		
		return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
	}

	/**
	 * 删除数据 
	 *
	 * @access	public
	 * @param	array	$param		数据删除规则
	 * @return	bool
	 */
	public function remove($param)
	{
		$param = $this->combined( $param );
		
		$where = !empty($param['in']) ? $param['in'] :  $param['where'] ;
		
		$sql = 'DELETE FROM `'.$this->tablePrefix().'` WHERE '.$where;
		
		return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
	}
	
/**
	 *  处理(查询)数组数据
	 * 
	 * @param array $param
	 */
	private function combined( $param )
	{
		
		$r = array(
			'col'   => null,
			'set'   => null,
			'where' => null,
			'in'    => null,
			'group' => null,
			'order' => null,
			'limit' => null,
			'count' => null,
			'pageRows' => null,
			'point'    => null,
		); 
		
		//处理查询字段
		if(isset($param['col']) && !empty($param['col'])) {
			
			$r['col'] = $param['col'];
		}
		
		//处理修改字段
		if(isset($param['set']) && !empty($param['set'])) {
			
			$r['set'] .= $this->where( $param['set'] );
		}
		
		//处理where条件字段
		if(isset($param['where']) && !empty($param['where'])) {
			
			$r['where'] .= $this->where( $param['where'] );
		}
		
		//处理in条件字段(尽量少用)
		if(isset($param['in']) && !empty($param['in'])) {

			$str = $keys = null;
			
			foreach ($param['in'] as $key=>$val) {
				
				$keys .= $key;
			}
			if(empty($keys)) {return false;}
			foreach ($param['in'][$keys] as $val) {
				
				$str .= $val.",";
			}
			$r['in'] = $keys.' in ('.trim($str ,',').')';
		}
		
		//处理group条件字段
		if(isset($param['group']) && !empty($param['group'])) {
			
			$r['group'] .= 'GROUP BY '.$param['group'];
		}
		
		//处理order条件字段
		if(isset($param['order']) && !empty($param['order'])) {
			
			$desc        = isset($param['desc']) && !empty($param['desc']) ? $param['desc'] : 'ASC';
			$r['order'] .= 'ORDER BY '.$param['order'].' '.$desc;
		}
		
		//处理limit条件字段
		if(isset($param['limit']) && !empty($param['limit'])) {
			
			$limit       = isset($param['limit']) && !empty($param['limit']) ? $param['limit'] : 1;
			$r['limit'] .= 'LIMIT '.$limit;
		}
		
		//处理limit条件字段
		if(isset($param['count']) && !empty($param['count'])) {
			
			$limit       = isset($param['count']) && !empty($param['count']) ? $param['count'] : '*';
			$r['count'] .= $limit;
		}
		
		//处理分页显示条件
		if(isset($param['pageRows']) && !empty($param['pageRows'])) {
			
			$r['pageRows'] .= $param['pageRows'];
		}
		
		//分页数
		if(isset($param['point']) && !empty($param['point'])) {
			
			$r['point'] .= $param['point'];
		}
		
		//同时判断
		if(isset($param['symbol']) && !empty($param['symbol'])) {
			
			$str          = $param['symbol'];
			$bol          = !empty($str['than']) ? $str['link'].' '.$str['than'] : '';
			$r['symbol'] .= $str['larger'].' '.$bol;
		}

		return $r;
	}
	
	/**
	 * 处理(where)组合语句
	 * 
	 * @param array $param
	 */
	private function where ( $param )
	{
		$str = null;	
		foreach ($param as $key =>$val) {
			if(is_int($val)) {
				
				$str .= "`{$key}` = {$val} ";
			} else {
				$str .= "`{$key}` =  '{$val}' ";
			}
		}
		
		return $str;
	}
	
	/**
	 * 处理(插入)数组数据
	 * 
	 */
	private function deal( $param )
	{
		$keys = $value = $vals = null;
		foreach( $param as $key => $val ) {
			
			$keys .=  "`".$key."`,";
			$vals .=  "'".$val."',";
		}
		
		$keys  = trim($keys , ',');
		$vals  = trim($vals , ',');
		$value = "({$keys}) VALUE ({$vals})";
		return $value;
	}
	
	/**
	 * 析构函数
	 */
	public function __destruct()
	{
		unset($this->pdo);
		unset($this->configFile);
		unset($this->tableKey);
	}

                   

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

100

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

80

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

240

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

140

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

100

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习