php+mssql 已经写好的万能函数

时间:2023-11-15 19:38:38
<?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=;$i<$num-;$i++){
$string.=$headAdd.$arrayList[$i].$trailAdd.$partition;
}
$string.=$headAdd.$arrayList[$num-].$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)>)?($valueNum):$keyNum;
if($num>){
for($i=;$i<$num-;$i++){
$string.=$headAdd.$arrayKey[$i].$equation.$valueHead.$arrayValue[$i].$valueTrail.$trailAdd.$partition;
}
$string.=$headAdd.$arrayKey[$num-].$equation.$valueHead.$arrayValue[$num-].$valueTrail.$trailAdd;
return $string;
}else if($num==){
$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=;$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-];
}
}
}
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="",$flag2=""){
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=;
while($row=mssql_fetch_array($qu_result,MSSQL_ASSOC)){//用 MYSQL_ASSOC 只得到关联索引,如同 mysql_fetch_assoc()。
$tmpFile[$i]=$row[name];
$i++;
}
//print_r($tmpFile);
$j=;
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=="" && $num_file!=$num_value){
if($flag=""){
}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!=""){
$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="",$flag2=""){
if($data_check!="" || $flag==""){
if(count($data_file)==count($data_value)){
if($flag2!=""){
$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=""){
if($data_check!="" || $flag==""){
$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=""){
//global $select_count;
//global $show;
if($flag2!=""){
$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>){
if($dataKeyList=="" && $data_file=="*"){
for($i=;$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(, conunt($data_file));
}
$file_count=count($data_file);
$file_count2=count($dataKeyList);
if($file_count<$file_count2 && $data_file!="*")$dataKeyList=$data_file;
$select_count=;
while($row=mssql_fetch_array($result,MSSQL_ASSOC)){//加MSSQL_ASSOC后不返回$row[0]等数字索引只得关联索引
for($i=;$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])>&&(strncasecmp($dataKeyList[$i],"count(*)",)==||strncasecmp($dataKeyList[$i],"count(1)",)==))
{
$arrkey=explode(" ",$dataKeyList[$i]);
$show[$select_count][$dataKeyList[$i]]=$row[$arrkey[]];
}
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!= && $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(,,)
}
</style>