博主信息
博文 13
粉丝 0
评论 0
访问量 14621
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
增删改查方法封装,运用PDO和预处理 3月21日作业
小毛的博客
原创
1544人浏览过

1、把字符串拼接为SQL(增删改查)语句;

2、运用循环和预处理,批量提交数据处理请求;

<?php 
	//连接数据库
	function con(){
		$dsn = 'mysql:dbname=oa;host=127.0.0.1;charset=utf8;port=3306';
		$user = 'root';
		$psw  = 'root';
		try{
			$p = new PDO($dsn,$user,$psw);
			echo '连接成功';			
		} catch(PDOException $e){
			print_r($e->getMessage());
			exit;
		}
		return $p;
	}
	
	//$conditions的参数[['列名','比较符号',比较值],[...]];此处只考虑WHERE子句只有一个条件或多个要求同时成立的条件;如果只有一个条件,请在一位数组外面套多一对中括号。
	function delete($table, $conditions=[]){
		$c   = con();
		$sql = 'DELETE FROM '.$table.' WHERE ';
		if(empty($conditions)){
			echo '要指定删除条件';
			return false;
		}else{
			
			for($i=0;$i<count($conditions);$i++){
				$bind[$i] = $conditions[$i][2];
				$sql .= $conditions[$i][0].$conditions[$i][1].":c$i AND ";
			}
			$sql = rtrim(rtrim($sql),'AND');
			
			}
		
		$a = $c->prepare($sql);

		for($i=0;$i<count($bind);$i++){
			$a->bindParam(":c$i",$bind[$i]);
		}
		var_dump($a->execute());
		$a = null;
		$c = null;
	}
	// delete('user',[['id','>','3']]);


	//$sets传参格式['列名'=>值,'列名'=>值];$where参数设置一样
	function update($table,$sets=[],$wheres=[]){
		$c   = con();
		$sql = 'UPDATE '.$table.' SET ';
		
		//拼接SQL语句的同时,建立提交数据库的关联数组
		$data=[];
		
		if(empty($sets)){
			return '请输入列名';
		}else{
			foreach($sets as $k1=>$v1){
				$sql .= $k1."=:$k1, ";
				$data[":$k1"] = $v1; 
		}		
			$sql = rtrim(rtrim($sql),',');
			}
		
		if(empty($wheres)){
			return '请指定修改条件';
			
		}else{
			$sql .= " WHERE ";

			//因where子句中的":字段名"与前面SET字句的会有重复,要加一个where前缀区分,才能存进关联数组
			foreach($wheres as $k2=>$v2){
				$sql .= $k2."=:where$k2 AND ";
				$data[":where$k2"] = $v2; 
			}
			$sql = rtrim(rtrim($sql),'AND');	
		}
		
		$a = $c->prepare($sql);
		$a->execute($data);
		$a = null;
		$c = null;
	}	
	// update('user',['name'=>'MS','gender'=>3],['gender'=>1,'name'=>'xm']);



		

	function select($table,$fields=[],$where='',$order='',$limit=''){
		$c   = con();
		$sql = 'SELECT ';
		if(empty($fields)){
			$sql  .="* "; 
		}else{
			foreach ($fields as $field) {
				$sql .= rtrim($field).","; 
			}
			$sql = rtrim($sql,",");
		}
		$sql .= " FROM ".$table;
		if(!empty($where)){
			$sql .= " WHERE ".$where;
		}
		if(!empty($order)){
			$sql .= " ORDER BY ".$order;
		}
		if (!empty($limit)) {
		 	$sql .= ' LIMIT '.$limit;
		 }

		$a = $c->prepare($sql);
		if($a->execute()){
			if($a->rowCount()){
				$a->setFetchMode(PDO::FETCH_ASSOC);
				$ret = $a->fetchAll();
				return $ret;
				$a = null;
				$c = null;
			}else{
				return '获取到0条数据';
			}
		}else{
				return '获取数据失败';
			}
	
	}

	//  var_dump(select('user',['name','gender'],'gender=100','department','5'));
	  


	function insert($table,$cols=[],$data=[]){
			$c          =   con();

			//开始拼接SQL语句
			$sql        =   "INSERT INTO ".$table." (";
			$qmark      =   "";
			foreach ($cols as $col) {
				$sql   .=   $col.",";
				$qmark .=   "?,";
			}
			$sql        =   rtrim($sql,',');
			$qmark      =   rtrim($qmark,',');
			$sql       .=   ") VALUES(".$qmark.")";

			//预处理
			$a          =   $c->prepare($sql);	
			
			//进行绑定
			for($i=1;$i<=count($cols);$i++){
				$a->bindParam($i,$bind[$i]);
			}
			
			//如果数据是一维数组,转化为二维数组
			if(count($data)==count($data,1)){
				$data=[$data];
			}
			
			//传值
			for($j=0;$j<count($data);$j++){
				for($i=1;$i<=count($cols);$i++){
					$bind[$i]=$data[$j][$i-1];	
					}
				$a->execute();
				$a = null;
				$c = null;
			}
		}
	// insert('user',$cols=['name','gender'],$data=['消化',3]);

总结:

1、写代码过程,要不断var_dump()检测是否有误,不要一堆代码了才检查;

2、要注销对象;

3、方法的参数要添加说明;

4、巧用双引号中变量会自动转化为值;

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学