喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [原创] 一个php连接mssql2000的类  
 
xmlxml
新手上路
Rank: 1



UID 75575
精华 0
积分 44
帖子 41
金钱 44 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-6-26
状态 离线
[广告]: 代充Paypal帐号美元
一个php连接mssql2000的类

最近由于公司装了mssql2000,只好从mysql转到了mssql2000,写了一个这样的类,个人用起来很方便,现在放出来,希望大家多多指教QQ81250668.

<?php
/**************************************************************************************************
|   类名:databaseClass 
|   功能描述:操作数据库。内有函数link_array(),equation_array(),insert(),update(),delete(),query()
|    初始化数据:  $select(要操作的数据库名),$link(已经打开的一个数据库链接)
|    建立日期:2006-7-21
|   完成日期:
|   修改日期:
|   其他说明:
|
|**************************************************************************************************/

class databaseCortrol{
    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_changmssql_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_changmssql_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_changmssql_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 $query;
        
@$result=mssql_query($query) or die("数据查寻时出错了!!!");
        
$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(0conunt($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++){
                        
$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;
        return 
$num_rows;
    }
}
?>
2006-9-7 10:21 PM#1
查看资料  发短消息  QQ  顶部
 
xmlxml
新手上路
Rank: 1



UID 75575
精华 0
积分 44
帖子 41
金钱 44 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-6-26
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
使用方法



<?php
  $host
="127.0.0.1";
$name="sa";
$password="sa";
$link=mssql_connect($host,$name,$password);
$db=new databaseCortrol("数据库",$link);
$db->query("数据表");//查找所有数据
$array_file=array("kk","yy");
$db->query("数据表",$array);//查找字段为"kk","yy"的字段
$check="where kk='3'";
$array_list=array("jj","kk");
$db->query("数据表",$array,$check,$array_list);//查找字段"kk=3"的所有"kk","yy"的字段并将数据放入$db->show多维数组"kk"字段对应$db->show[$i]["jj"]

$array_value=array("dddd","eee");
$db->insert($array_file,$array_value,"","1")//向表字段"kk","yy"分别插入值"dddd","eee",并且不对插入的数据进行去空格处理.(由于有时数据常带有空格,插入数据库后以后判断值时常有问题,我默认给去空格了.insert()函数由于时间原因未完成不好意思.但我所说明的功能都已经具有.)
/************
其它的我就不说了,大家看注释吧.我现在也一直是在用这个类.我会将它慢慢完善的.所以也希望大家多多指教.现丑了.
**********/
print_r($db->show);//显示刚才query()函数查询的结果
?>
顺道问一下,为什么有的贴子明明说有附件的,为什么我就是看不到???????????????????????很郁闷中

[ 本帖最后由 xmlxml 于 2006-9-7 10:50 PM 编辑 ]
2006-9-7 10:46 PM#2
查看资料  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] ID问题


QUOTE:
原帖由 xmlxml 于 2006-9-7 22:46 发表
顺道问一下,为什么有的贴子明明说有附件的,为什么我就是看不到???????????????????????很郁闷中
...
那些是很老的贴子,附件不小心掉了。

参数直接用一个变量$sql传递一条sql语句,不知这样偶合性与代码效率是不是比较好?

[ 本帖最后由 qh663 于 2006-9-8 01:21 AM 编辑 ]




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-9-8 12:03 AM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
phphp
版主
Rank: 7Rank: 7Rank: 7
加班一族


UID 65188
精华 1
积分 183
帖子 3006
金钱 172 喜悦币
威望 10
人脉 1
阅读权限 100
注册 2005-7-20
来自 北京市海淀区
状态 离线
[推荐阅读] image的onload事件不起作用
参数太多的用数组传



书到用时方恨少, 事非经过不知难
2006-9-8 12:27 AM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 2.486178 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP