PHP连接ACCESS数据库的类

试过PHP连接ACCESS数据库没?这个用途不大,但有时候也用得着!我以前试图将一个ASP程序改写成PHP的,原程序的数据库设计得比较完善,我打算开发时就用它的ACCESS数据库 ,等程序完成后再转换。这个程序改写计划最终搁浅了,但此过程中为了方便连接ACCESS数据库,我写了个PHP连接ACCESS数据库的类,比较方便,希望有人用得着!

 

<?
/*
    作者:夜无眠
    QQ:27262681

    ***本类只能在win平台的服务器上使用
*/
class  access{
    
function  access( $dir ){  // 构析函数,调用.com建立数据源,链接数据库;参数为数据库文件路径
         $this -> db = new  com( " adodb.connection " );  
        
$this -> db -> open( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " . realpath ( $dir ));
    }
    
function  sql( $sql ){ // 参数为SQL查询语句
         if ( preg_match ( " /limit +([0-9]*),([0-9]*)/ " , $sql , $out )){ // 正则分析sql语句,提取limit参数,模拟MYSQL的分页
             $limit1 = $out [ 1 ];
            
$limit2 = $out [ 2 ];
            
$sql = preg_replace ( " /limit +([0-9]*),([0-9]*)/ " , "" , $sql );
        }
        
$rs = $this -> db -> execute( $sql );
        
if ( strpos ( $sql , " select " ) === false  or  strpos ( $sql , " select " ) > 5 ){ // 非查询语句直接返回空值,防止错误提示出现
             return   "" ;
        }
        
if ( $limit1 == "" ){
            
$limit1 = 0 ;
        }
        
if ( $limit2 == "" ){ // 如果没有limit参数,设$limit2为总记录数
             $limit2 = 1000000 ;
        }
        
$rs -> move( $limit1 ); // 记录指针移动到第$limit1条记录处
         $i = 0 ;
        
while ( ! $rs -> eof and  $i < $limit2 ){
            
foreach ( $rs -> fields  as   $rss ){
                
$rs_r [ $rss -> name] = $rss -> value;
            }
            
$rs_rr [] = $rs_r ;
            
$rs -> move( 1 );
            
$i ++ ;
        }
        
return   $rs_rr ;
    }
    
function  getlist( $db , $p = "" ){ // 此函数用于将关联数组各元素处理成相关变量,第二个参数为变量名前缀,防止重名
         foreach ( $db   as   $key => $dba ){
            
global  ${ $p . $key };
            ${
$p . $key } = $dba ;
        }
    }
    
function  yasuo( $dir ){ // 压缩数据库函数,本函数用access::yasuo($dir);调用,$dir为数据库文件路径,调用次函数之前必须将所有当前数据库的连接中断!
         $ya   = new  com( " JRO.JetEngine " );
        
$truedir = realpath ( $dir );
        
$dirname = dirname ( $truedir );
        
$prov = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " ;
        
$ya -> CompactDatabase( $prov . $truedir , $prov . $dirname . " /aatmp.mdb " ); // 数据库所在目录必须有读写权限,否则会导致失败!
         unlink ( $truedir );
        
rename ( $dirname . " /aatmp.mdb " , $truedir );
    }
    
function  add( $file ){ // 新建一个ACCESS数据库 参数$file为文件路径,必须为相对路径
         $dir = dirname ( $_SERVER [ " SCRIPT_FILENAME " ]) . " / " . $file ;
        
$db = new  com( " ADOX.Catalog " );  
        
$db -> Create( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$dir " );
    }
}
?>

 

不知道怎么用吧!下面有示例!

 

<?  
include ( " access.php " ); 
access
:: add( " my.mdb " ); // 创建数据库 
$db = new  access( " my.mdb " ); // 连接数据库 
$sql =<<< eot 
CREATE   TABLE   a   (     
id   AUTOINCREMENT(
1 , 1 ) ,      
name   varchar(
10 )) 
eot; 
$db -> sql( $sql ); // 建表 
$sql =<<< eot 
insert into `a` (`name`) values(
' wo ri ' ); 
eot; 
$db -> sql( $sql ); // 插入数据 
$db -> sql( " insert into `a` (`name`) values('靠'); " ); 
$sql = " select * from a limit 1,1 "
$rs = $db -> sql( $sql ); // 查询 
print_r ( $rs ); 
?>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值