厚溥教育1718部数据库连接作业答案,分装一个操作数据库而无需写SQL语句的函数

<?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;
}
[email protected]_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);
?>

时间: 2024-10-10 09:50:00

厚溥教育1718部数据库连接作业答案,分装一个操作数据库而无需写SQL语句的函数的相关文章

Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

使用ThreadLocal、Apache的dbutils的QueryRunner和dbcp2数据库连接池的BasicDataSource封装操作数据库工具

/** * 数据库操作助手类 */ public class DatabaseHelper { private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseHelper.class); private static final ThreadLocal<Connection> CONNECTION_HOLDER; private static final QueryRunner QUERY_RUNNER; privat

python数据库连接之pyMysql -(二):使用变量向SQL语句中传递参数

使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法: 一.通过自定义参数传递: import pymysql import types dbinfo={"host":"192.168.6.41", "user":"lrtsaudio", "password":"2&Ty3DW75i!(vgo.l3Odp1fgWgEG", "db":&quo

高级:2015年10月23日作业答案

高级学员:2015年10月23日作业一.业务流程管理与重组1.流程管理的本质与核心是什么: 流程管理的核心是流程,流程管理的本质就是构造卓越的业务流程.2.流程管理与BPR的区别: 流程管理是以一种规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法.与业务流程重组的定义相似.流程管理的思想包含了BPR,但比BPR的概念更广泛,更适合现实需要.3.业务流程改进的过程和方法中,分析问题用哪2个图:寻找原因用什么图. 分析问题采用头脑风暴法.矩阵图法,寻找原因用鱼骨图法

新盟教育每部课程大揭秘-CCNA-基本配置

正在学CCNA的小伙伴们,我现在手里有新盟教育CCNAVIP课程内容,有需要的请在下方给我留下你的联系方式,(或者加我扣扣2638157648),我会一一发送给大家!!!不用谢我,请叫我红领巾

C#基础第一天-作业答案

题一答案: Console.WriteLine("请输入a"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入b"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入c"); int c = Convert.ToInt32(Console.ReadLine()); int

C#基础第二天-作业答案-九九乘法表-打印星星

题一:九九乘法表的答案 //正三角 for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) { Console.Write("{0}*{1}={2} ", j, i, i * j); } Console.WriteLine(); } Console.ReadLine(); //倒三角 for (int i = 9; i >= 1; i--) { for (int j = i; j >= 1; j--

sql查询作业答案

一 题目 二 答案 一 题目 1.查询所有的课程的名称以及对应的任课老师姓名 2.查询学生表中男女生各有多少人 3.查询物理成绩等于100的学生的姓名 4.查询平均成绩大于八十分的同学的姓名和平均成绩 5.查询所有学生的学号,姓名,选课数,总成绩 6. 查询姓李老师的个数 7. 查询没有报李平老师课的学生姓名 8. 查询物理课程比生物课程高的学生的学号 9. 查询没有同时选修物理课程和体育课程的学生姓名 10.查询挂科超过两门(包括两门)的学生姓名和班级 .查询选修了所有课程的学生姓名 12.查

&lt;潭州教育&gt;-Python学习笔记@作业1

作业: 1.定义讲过的每种数值类型,序列类型 数值类型: 整型:int 字符型:float 字符串:str 布尔型: bool 序列类型: 列表: 有序,可变,元素类型没有固定要求lst = [1,2,3] 元祖:有序,不能改变,元素类型没有固定要求tuple_list = (1,2,3,4,5) 字典: 无序,键值对组合,利于检索dict = {'username':'Stone','passwd':'helloworld'} 集合: 无序,元素类型没有固定要求set_list = {1,2,