<?php /************************************************************************************************** | 类名:databaseClass | 功能描述:操作数据库。内有函数link_array(),equation_array(),insert(),update(),delete(),query() | 初始化数据: $select(要操作的数据库名),$link(已经打开的一个数据库链接) | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 其他说明: | |**************************************************************************************************/ class databaseCortrol{ public $dataKeyList; public $show; public $result; public $num_rows; function __construct($select,$link){ mssql_select_db($select); $this->link=$link; } function __destruct(){ } /************************************************************************************************** | 函数名:link_array() | 功能描述:将数组用特定的形式连接成字符串 | 输入参数: $arrayList(数组或单个变量),$partition(连接符),$headAdd,$trailAdd--各连接数头、尾添加符 | 返回值:return $string(返回修改后的字符串) | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明: | |**************************************************************************************************/ function link_array($arrayList,$partition,$headAdd="",$trailAdd=""){ if(is_array($arrayList)){ $num=count($arrayList); for($i=0;$i<$num-1;$i++){ $string.=$headAdd.$arrayList[$i].$trailAdd.$partition; } $string.=$headAdd.$arrayList[$num-1].$trailAdd; return $string; }else{ $string=$headAdd.$arrayList.$trailAdd; return $string; } } /************************************************************************************************** | 函数名:equation_array() | 功能描述:将两个数组或两个数按索引相等,并用特定的形式连接成字符串 | 输入参数: $arrayKey(数组或单个变量),$arrayValue(数组或单个变量),$partition(连接符),$headAdd,$trailAdd--各连接数头、尾添加符 | $equation,$valueHead,$valueTrial--作为update()函数调用时可省去后5位参数,使用默认值 | 返回值:return $string(返回修改后的字符串) | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明arrayKey数组与$arrayValue数组的个数不相等时,可能数据不完整 | |**************************************************************************************************/ function equation_array($arrayKey,$arrayValue,$partition,$headAdd="",$trailAdd="",$equation="=",$valueHead="‘",$valueTrail="‘"){ $keyNum=count($arrayKey); $valueNum=count($arrayValue); $num=(($keyNum-$valueNum)>0)?($valueNum):$keyNum; if($num>1){ for($i=0;$i<$num-1;$i++){ $string.=$headAdd.$arrayKey[$i].$equation.$valueHead.$arrayValue[$i].$valueTrail.$trailAdd.$partition; } $string.=$headAdd.$arrayKey[$num-1].$equation.$valueHead.$arrayValue[$num-1].$valueTrail.$trailAdd; return $string; }else if($num==1){ $string=$headAdd.$arrayKey.$equation.$valueHead.$arrayValue.$valueTrail.$trailAdd; return $string; }else{ return false; } } /************************************************************************************************** | 函数名:array_insert() | 功能描述:可将变量插入到数组的中指定位置(功能与系统函数array_splice()差不多.)如$array1=array_insert($array,2,"kk") | 同于array_splice($array2,2,0,"kk"),两函数运行后$array1=$array2 | 输入参数: | 返回值:return $string(返回修改后的数组) | 建立日期:2006-8-9 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明:未完成2006-08-09 | |**************************************************************************************************/ function array_insert($array,$serial,$instead){ if(is_array($serial)){ }else{ for($i=0;$i<count($array);$i++){ if($i==$serial){ $tmp[$i]=$array[$i]; $array[$i]=$instead; }else if($i>$serial){ $tmp[$i]=$array[$i]; $array[$i]=$tmp[$i-1]; } } } return $array; } /************************************************************************************************** | 函数名:array_trim() | 功能描述:将数组中各个单元分别去两头空格 | 输入参数: $array数组(支持多维数组及单个字符串); | 返回值:return $array_trim(返回修改后的数组) | 建立日期:2006-08-17 | 完成日期: 2006-08-17 | 修改日期: 2006-08-24(改进原来去多维数组空格时出错) | 程序员:浪迹天涯/v | 其他说明: | |**************************************************************************************************/ function array_trim($array){ if(is_array($array)){ foreach ($array as $key=>$value) { if(is_array($value)){ $trim_key=trim($key); $trim=$this->array_trim($value); $array_trim[$trim_key]=$trim; }else{ $trim_key=trim($key); $trim=trim($value); $array_trim[$trim_key]=$trim; } } }else{ $array_trim=trim($array); } return $array_trim; } /************************************************************************************************** | 函数名:insert() | 功能描述:对数据库数据表插入数据 | 输入参数data_table(数插入数据的表名)。 $data_file(数据插入的字段名。当$data_file="",时$data_value必须是带字段索引的字符串,即按字段索引来给对应的字段付值)。 $data_value(数据插入的值)。 $flag(是否引许$data_file与$data_value个数不等当$flag="1"时可以不等,但$data_value不能大于$data_file,若$data_value为带字段索引,字段索引须包含在$data_file中,若此时$data_file为空,则应包含在插入的表的字段中。当$flag="2"时,$data_value必须是带字段索引数组,$data_value可以大于$data_file,当有$data_value的索引不是有效字段时,忽略该数据.)。 $flag2(默为0自动去字段及键值两头空格,当$flag2=1时不去空格)。 | 返回值:返回插入数据影响记录的条数,若插入失败返回0 | 建立日期:2006-7-21 | 完成日期: | 修改日期:2006-08-10 | 程序员:浪迹天涯/v | 其他说明:当$data_file与$data_value个数不等时函数将 | |**************************************************************************************************/ function insert($data_table,$data_file="",$data_value,$flag="0",$flag2="0"){ if($data_file==""){ //$qu_query="select Top 1 * from $data_table";//查询$data_table表第一行 //@$qu_result=mssql_query($qu_query) or die("插入数据时查寻列名时出错了!!!"); //$num_fields=mssql_num_fields($qu_result);//返回字段个数 //for($i=0;$i<$num_fields;$i++){ //$data_file[$i]=mssql_field_name($qu_result,$i);//取得表中的字段名,0表示取第一个字段名,1取第二个,以此类推 //echo mssql_field_type($qu_result,$i); //} $qu_query="select a.name from syscolumns a,systypes b where a.xtype=b.xtype and a.id=object_id(‘".$data_table."‘)";//查询表中的字段 $qu_query2="select a.name from syscolumns a,systypes b where a.xtype=b.xtype and a.id=object_id(‘".$data_table."‘) and COLUMNPROPERTY( a.id,a.name,‘IsIdentity‘)=1";//查询表中的自增量字段(由于不等于1时求出非自增量字段时索引乱了,只好用总字段-自增字段 @$qu_result=mssql_query($qu_query) or die("插入数据时查寻列名出错,请检查数据库类,或者尝试指定插入的字段名!!"); @$qu_result2=mssql_query($qu_query2) or die("插入数据时查寻列名出错,请检查数据库类,或者尝试指定插入的字段名!!"); $i=0; while($row=mssql_fetch_array($qu_result,MSSQL_ASSOC)){//用 MYSQL_ASSOC 只得到关联索引,如同 mysql_fetch_assoc()。 $tmpFile[$i]=$row[name]; $i++; } //print_r($tmpFile); $j=0; while($row=mssql_fetch_array($qu_result2,MSSQL_ASSOC)){//用 MYSQL_ASSOC 只得到关联索引,如同 mysql_fetch_assoc()。 $tmpFile2[$j]=$row[name]; $j++; } $data_file=array_values(array_diff($tmpFile,$tmpFile2)); /**if($flag=="1"){ if(array_intersect($data_file,array_values($data_value))=array_values($data_value)){ }else{ } } **/ } $num_file=count($data_file); $num_value=count($data_value); if($flag=="1" && $num_file!=$num_value){ if($flag="2"){ }else{ if($num_file>$num_value){ $data_value=array_pad($data_value,$num_file,"");//在数组后面追加空值,使$data_file与$data_value相等 }else{ echo "出错了,你输入的值大于字段个数!!"; return false; } } }else{ if($num_file!=$num_value){ echo "出错啦!!!insert对象第二个($data_file)及第三个参数($data_value)个数不相等!"; return false; } } if($flag2!="1"){ $data_file=$this->array_trim($data_file); $data_value=$this->array_trim($data_value); } $file=$this->link_array($data_file,","); $value=$this->link_array($data_value,",","‘","‘"); $query="insert into $data_table ($file)values($value);"; //echo $query; @$result=mssql_query($query) or die ("保存数据时出错了!!!"); $num_chang= mssql_rows_affected($this->link); @mssql_free_result($result); return $num_chang; } /************************************************************************************************** | 函数名:update() | 功能描述:对数据库数据表更新数据 | 输入参数data_table(更新数据的表名),$data_file(数据更新的字段名),$data_value(数据更新的值),$data_check(数据更新条件),$flag2默为0自动去字段及键值两头空格,当$flag2=1时不去空格 | 返回值:返回更新数据影响记录的条数,若更新失败返回0 | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明: | |**************************************************************************************************/ function update($data_table,$data_file,$data_value,$data_check="",$flag="0",$flag2="0"){ if($data_check!="" || $flag=="1"){ if(count($data_file)==count($data_value)){ if($flag2!="1"){ $data_file=$this->array_trim($data_file); $data_value=$this->array_trim($data_value); } $data_file_value=$this->equation_array($data_file,$data_value,","); $queryUpate="UPDATE $data_table SET $data_file_value $data_check"; //echo $queryUpate; @$resultUpate=mssql_query($queryUpate) or die("数据更新时出错了"); $num_chang= mssql_rows_affected($this->link); return $num_chang; }else{ echo "出错啦!!!update对象第二个($data_file)及第三个参数($data_value)个数不相等!"; return false; } }else{ echo "出错啦!!!当$data_check参数为空时,应当将$flag改为1才可以将所有数据进行修改"; } } /************************************************************************************************** | 函数名:delete() | 功能描述:对数据库数据表进行删除操作 | 输入参数:$data_table(删除数据的表名),$data_check(数据删除条件) | 返回值:返回数据删除的条数,若删除失败返回0 | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明: | |**************************************************************************************************/ function delete($data_table,$data_check="",$flag="0"){ if($data_check!="" || $flag=="1"){ $queryDelete="DELETE from $data_table $data_check"; //echo $queryDelete; @$result=mssql_query($queryDelete) or die("删除数据时出错了!!!"); $num_chang= mssql_rows_affected($this->link); return $num_chang; }else{ echo "出错啦!!!delete()函数$data_check为空时$flag应为1才可以删除所有数据"; } } /************************************************************************************************** | 函数名:query() | 功能描述:对数据库数据表进行查寻操作 | 输入参数:$data_table(查寻数据的表名),$data_file(查寻数据的字段名),$data_check(数据查寻条件),$dataKeyList(数据查寻后返回的数组索引规则,默认则等于$data_file,当$dataKeyList="autocoding"时,返回的字段键值为顺序序号,$flag2默为0自动去字段及键值两头空格,当$flag2=1时不去空格 | 返回值:返回数据查寻到的条数,但注意查寻文件不合条件或查寻失败都返回0 | 建立日期:2006-7-21 | 完成日期: | 修改日期: | 程序员:浪迹天涯/v | 其他说明: | |**************************************************************************************************/ function query($data_table,$data_file="",$data_check="",$dataKeyList="",$flag2="0"){ //global $select_count; //global $show; if($flag2!="1"){ $data_file=$this->array_trim($data_file); $dataKeyList=$this->array_trim($dataKeyList); } if($data_file=="")$data_file="*"; $file=$this->link_array($data_file,","); //print_r($data_table); $query="select $file from $data_table $data_check"; echo "sql 语句: ".$query."<br>"; @$result= mssql_query($query) or die("数据查寻时出错了!!!"); $this->result=@$result; // @$res=mssql_fetch_array($result); // $rownum = mysql_num_rows($result); $num_rows = mssql_num_rows($result);//返回数据集行数 $num_fields=mssql_num_fields($result);//返回字段个数 if($num_rows>0){ if($dataKeyList=="" && $data_file=="*"){ for($i=0;$i<$num_fields;$i++){ $dataKeyList[$i]=mssql_field_name($result,$i);//取得表中的字段名,0表示取第一个字段名,1取第二个,以此类推 } $data_file=$dataKeyList; //$yy=mssql_fetch_field($result); //print_r($yy->max_length); //print_r($dataKeyList); //echo "<br>"; }elseif($dataKeyList==""){ $dataKeyList=$data_file; }elseif($dataKeyList=="autocoding"){ $dataKeyList=range(0, conunt($data_file)); } $file_count=count($data_file); $file_count2=count($dataKeyList); if($file_count<$file_count2 && $data_file!="*")$dataKeyList=$data_file; $select_count=0; while($row=mssql_fetch_array($result,MSSQL_ASSOC)){//加MSSQL_ASSOC后不返回$row[0]等数字索引只得关联索引 for($i=0;$i<$file_count2;$i++){ // echo "strncasecmp=".strncasecmp($dataKeyList[$i],"count(*)",8)."=<br>" ; // if($dataKeyList[$i]=="count(*)" || strncasecmp($dataKeyList[$i],"count(*)",8)==0) if(strlen($dataKeyList[$i])>8&&(strncasecmp($dataKeyList[$i],"count(*)",8)==0||strncasecmp($dataKeyList[$i],"count(1)",8)==0)) { $arrkey=explode(" ",$dataKeyList[$i]); $show[$select_count][$dataKeyList[$i]]=$row[$arrkey[2]]; } elseif($dataKeyList[$i]=="count(*)"||$dataKeyList[$i]=="count(1)") { $show[$select_count][$dataKeyList[$i]]=$row["computed"]; } else { $show[$select_count][$dataKeyList[$i]]=$row[$data_file[$i]]; } } if($file_count>$file_count2){ for($j=$i;$j<count($data_file);$j++){ $show[$select_count][$dataKeyList[$j]]=$row[$data_file[$j]]; } } $select_count++; }/** if(is_array($dataKeyList)){ }else{ $file_count=count($dataKeyList); $select_count=0; while($row=mssql_fetch_array($result,MSSQL_ASSOC)){ for($i=0;$i<$file_count;$i++){ $show[$select_count][$dataKeyList]=$row[$data_file[$i]]; } $select_count++; } }**/ } mssql_free_result($result); if($flag2!=1 && $show!=""){ $show=$this->array_trim($show); } $this->dataKeyList=$dataKeyList; $this->show=$show; $this->select_count=$select_count; $this->num_rows=$num_rows; return $num_rows; } function displayquery() { $dataKeyList=$this->dataKeyList; //fields name $show=$this->show; //data value $select_count=$this->select_count; // if ($show) { $output= "<p class=‘four‘><table ><tr>"; foreach($dataKeyList as $field) $output=$output."<p class=‘one‘><td>".$field."</td></p>"; $output=$output."</tr>"; foreach($show as $k=>$val) {//意思是for $book each $value( as ) $output=$output."<tr>"; if( is_array($val) ) foreach( $val as $value) $output=$output. "<p class=‘four‘><td> ".$value."</td></p>"; else $output=$output. "<p class=‘one‘><td>".$val."</td></p>"; $output=$output. "</tr>"; } $output=$output. "</table></p>"; }else { $output="no result"; } echo $output; } } ?> <style type="text/css"> p.one { border-style: solid; border-color: #0000ff } p.two { border-style: solid; border-color: #ff0000 #0000ff } p.three { border-style: solid; border-color: #ff0000 #00ff00 #0000ff } p.four { border-style: solid; border-color: #ff0000 #00ff00 #0000ff rgb(250,0,255) } </style>