標籤:青春 utf8 turn connect als names erro 插入 資料庫連接
<?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);
?>
厚溥教育1718部資料庫連接作業答案,分裝一個操作資料庫而無需寫SQL語句的函數