<?php
	header("Content-type:text/html;charset=utf8");
	//PHP操作数据库的函数
	function phpsql($dbconfig,$type,$field=‘‘,$data=array(),$condition=array(),$join=array()){
		//判断存不存在数据库连接主机
		if(!isset($dbconfig[‘host‘])){
			return "数据库连接主机不存在";
		}
		//判断存不存在数据库用户名
		if(!isset($dbconfig[‘user‘])){
			return "不存在数据库用户名";
		}
		//判断存不存在数据库用户名密码
		if(!isset($dbconfig[‘pass‘])){
			return "不存在数据库用户名密码";
		}
		//判断存不存在需要使用的数据库
		if(!isset($dbconfig[‘dbname‘])){
			return "不存在需要使用的数据库";
		}
		//判断存不存在需要使用的数据表
		if(!isset($dbconfig[‘table‘])){
			return "不存在需要使用的数据表";
		}
		//定义一个需要生成的SQL语句
		$sql=‘‘;
		if($type==‘insert‘){ //添加数据
			//连接SQL语句
			$sql.=‘insert into ‘.$dbconfig[‘table‘];
			//判断field的数据类型,可以是字符串,也可以是数组
			$fiedltype=gettype($field);
			if( $fiedltype!=‘string‘ && $fiedltype!=‘array‘){
				return "字段数据类型必须是字符串或数组";
			}elseif($fiedltype==‘array‘){ //当字段数据类型为数组时
				$fields=implode(‘,‘,$field);
				$sql.=‘(‘.$fields.‘) values‘;
			}else{
				$sql.=‘(‘.$field.‘) values‘;
				$field=explode(‘,‘,$field);//将字段数据变成数组,方便下面插入数据时从$data中取数据
			}
			//判断插入的数据不能为空,且必须为数组数据类型
			if(!is_array($data)||empty($data)){
				return "插入数据时,数据不能为空,且数据类型必须为 字段=>数据值 格式的数组";
			}
			//判断数组维度,
			$tmp=isset($data[$field[0]])?$data[$field[0]]:array();
			if(is_array($tmp)){  //如果一级子元素为数组,则说明是插入多条数据
				foreach($data as $val){ //遍历数组
					$sql.=‘(‘;
					foreach($field as $v){ //遍历字段,按照字段顺序取出数据
						$sql.=‘"‘.$val[$v].‘",‘;
					}
					$sql=rtrim($sql,‘,‘);//去掉最右边多余的逗号
					$sql.=‘),‘;
				}
				$sql=rtrim($sql,‘,‘);
			}else{ //否则插入一条
				$sql.=‘(‘;
				foreach($field as $v){ //遍历字段,按照字段顺序取出数据
					$sql.=‘"‘.$data[$v].‘",‘;
				}
				$sql=rtrim($sql,‘,‘);//去掉最右边多余的逗号
				$sql.=‘)‘;
			}
			//echo $sql;
		}elseif($type==‘update‘){ //更新数据
			//写更新语句的结构
			$sql.=‘update ‘.$dbconfig[‘table‘].‘ set ‘;
			//判断field的数据类型,可以是字符串,也可以是数组
			$fiedltype=gettype($field);
			if( $fiedltype!=‘string‘ && $fiedltype!=‘array‘){
				return "字段数据类型必须是字符串或数组";
			}elseif($fiedltype==‘array‘){ //当字段数据类型为数组时
				foreach($field as $v){
					$sql.=$v.‘="‘.$data[$v].‘",‘;
				}
			}else{
				$field=explode(‘,‘,$field);//将字段数据变成数组,方便下面插入数据时从$data中取数据
				foreach($field as $v){
					$sql.=$v.‘="‘.$data[$v].‘",‘;
				}
			}
			$sql=rtrim($sql,‘,‘);//去掉最右边多余的逗号
			if(!empty($condition)){
				$where=isset($condition[‘where‘])?$condition[‘where‘]:‘‘;
				$order=isset($condition[‘order‘])?$condition[‘order‘]:‘‘;
				$limit=isset($condition[‘limit‘])?$condition[‘limit‘]:‘‘;
				if($where){ //若存在where条件
					$wheretype=gettype($where);//判断where的一级元素数据类型
					if($wheretype==‘string‘){ //若是字符串,则直接连接where条件
						$sql.=‘ where ‘.$where;
					}else{ 	//若为数组,则遍历where的值当条件
						$sql.=‘ where 1=1 ‘;
						foreach($where as $key=>$v){
							$vtype=gettype($v); //判断where的二级元素数据类型
							if($vtype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:>、<、<=、>=、like。。。),第二个值当作条件数据
								if($v[0]==‘or‘){
									$sql.=" ".$v[0]." $key=‘".$v[1]."‘";
								}else{
									$childetype=gettype($v[1]); //判断条件数据的数据类型
									if($childetype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:in。。。),第二个值当作条件数据
										$sql.=" and $key ".$v[0]." (‘".implode($v[1],"‘,‘");
										$sql.="‘)";
									}else{
										$sql.=" and $key ".$v[0]." ‘".$v[1]."‘";
									}
								}
							}else{
								$sql.=‘ and ‘.$key.‘="‘.$v.‘"‘;//如果是字符串类型数据,则默认是和条件
							}						
						}
					}	
				}
				if($order){ //如果存在排序条件
					$ordertype=gettype($order);//判断order的一级元素数据类型
					if($ordertype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ order by ‘.$order;
					}else{ //否则遍历数组
						$sql.=‘ order by ‘;
						foreach($order as $ke=>$va){
							$sql.=$ke.‘ ‘.$va.‘,‘;
						}
						$sql=rtrim($sql,‘,‘);//去掉最右边的逗号
					}
				}
				if($limit){ //若果存在限制条件
					$limittype=gettype($limit);//判断limit的一级元素数据类型
					if($limittype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ limit ‘.$limit;
					}else{ //否则将数组的第二个值当截取长度
						$sql.=‘ limit ‘.$limit[1];
						
					}
				}
			}
			//echo $sql;
		}elseif($type==‘delete‘){ //删除数据
			if(empty($condition)){
				return "数据删除必须存在数据条件";
			}
			$sql="delete from ".$dbconfig[‘table‘];
			if(!empty($condition)){
				$where=isset($condition[‘where‘])?$condition[‘where‘]:‘‘;
				$order=isset($condition[‘order‘])?$condition[‘order‘]:‘‘;
				$limit=isset($condition[‘limit‘])?$condition[‘limit‘]:‘‘;
				if($where){ //若存在where条件
					$wheretype=gettype($where);//判断where的一级元素数据类型
					if($wheretype==‘string‘){ //若是字符串,则直接连接where条件
						$sql.=‘ where ‘.$where;
					}else{ 	//若为数组,则遍历where的值当条件
						$sql.=‘ where 1=1 ‘;
						foreach($where as $key=>$v){
							$vtype=gettype($v); //判断where的二级元素数据类型
							if($vtype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:>、<、<=、>=、like。。。),第二个值当作条件数据
								if($v[0]==‘or‘){
									$sql.=" ".$v[0]." $key=‘".$v[1]."‘";
								}else{
									$childetype=gettype($v[1]); //判断条件数据的数据类型
									if($childetype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:in。。。),第二个值当作条件数据
										$sql.=" and $key ".$v[0]." (‘".implode($v[1],"‘,‘");
										$sql.="‘)";
									}else{
										$sql.=" and $key ".$v[0]." ‘".$v[1]."‘";
									}
								}
							}else{
								$sql.=‘ and ‘.$key.‘="‘.$v.‘"‘;//如果是字符串类型数据,则默认是和条件
							}						
						}
					}	
				}
				if($order){ //如果存在排序条件
					$ordertype=gettype($order);//判断order的一级元素数据类型
					if($ordertype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ order by ‘.$order;
					}else{ //否则遍历数组
						$sql.=‘ order by ‘;
						foreach($order as $ke=>$va){
							$sql.=$ke.‘ ‘.$va.‘,‘;
						}
						$sql=rtrim($sql,‘,‘);//去掉最右边的逗号
					}
				}
				if($limit){ //若果存在限制条件
					$limittype=gettype($limit);//判断limit的一级元素数据类型
					if($limittype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ limit ‘.$limit;
					}else{ //否则将数组的第一个值当起始位置,第二个值当截取长度
						$sql.=‘ limit ‘.$limit[1];
						
					}
				}
			}
			//echo $sql;
		}else{ //查询数据
			if(!$field){
				return "查询字段不能为空";
			}
			$sql="select ";
			if(!empty($condition)){
				$distinct=isset($condition[‘distinct‘])?$condition[‘distinct‘]:false;
				$group=isset($condition[‘group‘])?$condition[‘group‘]:‘‘;
				$where=isset($condition[‘where‘])?$condition[‘where‘]:‘‘;
				$order=isset($condition[‘order‘])?$condition[‘order‘]:‘‘;
				$limit=isset($condition[‘limit‘])?$condition[‘limit‘]:‘‘;
				if($distinct){ //判断是否去重,如果为真,则去重
					$sql.=" distinct ";
				}
				$fieldtype=gettype($field);//获取字段数据类型
				if($fieldtype==‘string‘){ //如果字段类型为字符串,则直接拼接字段
					$sql.=$field;
					$field=explode(‘,‘,$field);//将字符串变成数组,以便于字段下面的使用
				}else{ //否则,将数组分割成字符串,再拼接
					$fields=implode(‘,‘,$field);
					$sql.=$fields;
				}
				$sql.=" from ".$dbconfig[‘table‘];//拼接查询数据表
				if($join){ //如果存在关联数据表,则遍历数组,将$join的键当作需要关联的表,$join的数组类型的第一个值当作关联方式,第二个值当作主表的关联字段,第三个当作关联表的关联字段
					foreach($join as $key=>$v){
						$sql.=" ".$v[0]." join ".$key." on ".$dbconfig[‘table‘].".".$v[1]."=$key.".$v[2];
					}
				}
				
				if($where){ //若存在where条件
					$wheretype=gettype($where);//判断where的一级元素数据类型
					if($wheretype==‘string‘){ //若是字符串,则直接连接where条件
						$sql.=‘ where ‘.$where;
					}else{ 	//若为数组,则遍历where的值当条件
						$sql.=‘ where 1=1 ‘;
						foreach($where as $key=>$v){
							$vtype=gettype($v); //判断where的二级元素数据类型
							if($vtype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:>、<、<=、>=、like。。。),第二个值当作条件数据
								if($v[0]==‘or‘){
									$sql.=" ".$v[0]." $key=‘".$v[1]."‘";
								}else{
									$childetype=gettype($v[1]); //判断条件数据的数据类型
									if($childetype==‘array‘){ //若为数组,则将数组中的第一个值当作 连接类型(如:in。。。),第二个值当作条件数据
										$sql.=" and $key ".$v[0]." (‘".implode($v[1],"‘,‘");
										$sql.="‘)";
									}else{
										$sql.=" and $key ".$v[0]." ‘".$v[1]."‘";
									}
								}
							}else{
								$sql.=‘ and ‘.$key.‘="‘.$v.‘"‘;//如果是字符串类型数据,则默认是和条件
							}						
						}
					}	
				}
				if($group){ //若存在分组
					$sql.=‘ group by ‘;
					$grouptype=gettype($group);//获取group数据类型
					if($grouptype==‘string‘){ //如果分组数据类型为字符串,则直接拼接字段
						$sql.=$group;
					}else{ //否则,将数组分割成字符串,再拼接
						$groupstr=implode(‘,‘,$group);
						$sql.=$groupstr;
					}
				}
				if($order){ //如果存在排序条件
					$ordertype=gettype($order);//判断order的一级元素数据类型
					if($ordertype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ order by ‘.$order;
					}else{ //否则遍历数组
						$sql.=‘ order by ‘;
						foreach($order as $ke=>$va){
							$sql.=$ke.‘ ‘.$va.‘,‘;
						}
						$sql=rtrim($sql,‘,‘);//去掉最右边的逗号
					}
				}
				if($limit){ //若果存在限制条件
					$limittype=gettype($limit);//判断limit的一级元素数据类型
					if($limittype==‘string‘){ //如果值为字符串,则直接拼接
						$sql.=‘ limit ‘.$limit;
					}else{ //否则将数组的第二个值当截取长度
						$sql.=‘ limit ‘.$limit[1];
						
					}
				}
			}
			//echo $sql;
		}
		$connect=@mysqli_connect($dbconfig[‘host‘],$dbconfig[‘user‘],$dbconfig[‘pass‘],$dbconfig[‘dbname‘]);//通过传进来的参数,连接数据库
		if(mysqli_connect_errno($connect)){ //若链接出错,则返回错误信息
			return  mysqli_connect_error($connect);
		}
		mysqli_query($connect,"set names utf8");//设置字符集
		$recive=mysqli_query($connect,$sql);//执行SQL语句,并接收返回信息
		if($type==‘select‘){
			if(is_object($recive)){
				$result=array();
				while($res=mysqli_fetch_assoc($recive)){
					$result[]=$res;
				}
				return $result;
			}else{
				return "查询出错,请检查参数格式是否正确";
			}
		}else{
			if($recive==false){ //如果返回false说明SQL没有执行成功
				return "操作出错,请检查参数格式是否正确";
			}else{
				return mysqli_affected_rows($connect); //否则返回影响的行数
			}
		}
		mysqli_close($connect);
	}
	//数据库参数格式
	$dbconfig=array(
		‘host‘=>‘localhost‘,
		‘user‘=>‘root‘,
		‘pass‘=>‘root‘,
		‘dbname‘=>‘gallery‘,
		‘table‘=>‘gallery‘
	);
	$type=‘select‘;//插入类型为insert,更新类型为update,删除类型为delete,查询类型为select
	//字段参数格式
	$field1="gallery_name,mid,image,create_time";
	$field2=array(‘gallery_name‘,‘mid‘,‘image‘,‘create_time‘);
	//插入、更新数据时,数据的格式
	$insertdata1=array( //插入一条
		‘gallery_name‘=>‘美丽长沙‘,
		‘mid‘=>2,
		‘create_time‘=>147258369,
		‘image‘=>‘uploade/image1.jpg‘
	);
	$insertdata2=array( //插入多条
		array(
			‘gallery_name‘=>‘美丽长沙‘,
			‘mid‘=>2,
			‘create_time‘=>147258369,
			‘image‘=>‘uploade/image1.jpg‘),
		array(
			‘gallery_name‘=>‘我爱我家‘,
			‘mid‘=>3,
			‘create_time‘=>147258369,
			‘image‘=>‘uploade/image2.jpg‘),
		array(
			‘gallery_name‘=>‘青春年华‘,
			‘mid‘=>4,
			‘create_time‘=>147258369,
			‘image‘=>‘uploade/image3.jpg‘),
		array(
			‘gallery_name‘=>‘最爱的她‘,
			‘mid‘=>5,
			‘create_time‘=>147258369,
			‘image‘=>‘uploade/image4.jpg‘)
	);
	$where1=‘ gallery_name="美好世界" or mid=4 and create_time<=147258369 ‘;
	$where2=array(
		‘gallery_name‘=>"美好世界",
		‘mid‘=>array(‘or‘,4),
		‘create_time‘=>array(‘<=‘,147258369),
		‘image‘=>array(‘like‘,‘%upload%‘),
		‘id‘=>array(‘in‘,array(2,3,4,5))
	);
	$order = array(
		‘create_time‘=>‘desc‘,
		‘mid‘=>‘asc‘
	);
	$limit1=‘1,1‘;
	$limit2=array(1,3);
	//关联数据表参数格式
	$join=array(
			‘photos‘=>array(‘left‘,‘id‘,‘gallery_id‘),
			‘administor‘=>array(‘left‘,‘mid‘,‘id‘)
			);
	//条件参数格式
	$condition=array(
		‘where‘=>$where1,
		‘order‘=>$order,
		‘limit‘=>$limit2,
		‘distinct‘=>true,
		‘group‘=>array(‘mid‘,‘gallery_name‘)
	);
	$a=phpsql($dbconfig,$type,$field1,$insertdata1,$condition); //调用函数
	var_dump($a);
?>
厚溥教育1718部数据库连接作业答案,分装一个操作数据库而无需写SQL语句的函数
原文:http://www.cnblogs.com/bobi-PHP-blog/p/7602939.html