欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php 连 access 有大用

shiping1 的头像

用ADODB来让PHP操作ACCESS数据库的方法

作者: 字体:[增加 减小] 类型:转载
这两天都在研究PHP, 主要是为了应付学习AJAX所需要的一些后台知识, 我对开源的东西总是有一种莫名的亲近感, 不要钱的东西果然人人爱啊  由于一般的空间MYSQL数据库都要单独花钱购买, 所以打算暂时先用ACCESS, 结果一查资料才头大, 原来PHP对每种不同的数据库的操作方法都不一样..... 于是搜了一些BLOG, 发现许多链接ACCESS的方法,但都不太尽如人意, 最后终于查到ADODB这个东东. 它是PHP的一个类, 内置了绝大部份你见过的数据库的操作方法. 比如PHP操作一个MYSQL一般是这样: 
ADODB 见附件 adb512.zip
复制代码代码如下:
$db = mysql_connect("localhost", "root", "password");  
mysql_select_db("mydb",$db);  
$result = mysql_query("SELECT * FROM employees",$db);  
if ($result === false) die("failed");   
while ($fields = mysql_fetch_row($result)) {  
 for ($i=0, $max=sizeof($fields); $i < $max; $i++) {  
 print $fields[$i].' ';  
 }  
 print "<br>n";  
}  

如果使用ADODB, 那么以下程序得到的结果同上 

复制代码代码如下:
include("adodb.inc.php");  
 $db = NewADOConnection('mysql');  
 $db->Connect("localhost", "root", "password", "mydb");  
 $result = $db->Execute("SELECT * FROM employees");  
 if ($result === false) die("failed");   
 while (!$result->EOF) {  
 for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)  
 print $result->fields[$i].' ';  
 $result->MoveNext();  
 print "<br>n";  
 }  

然后, 如果要使用其它数据库,改变一下ADOConnection的连接名就是了, ACCESS就用 

 $db = NewADOConnection('access'); 

完整代码如下 (下面连access有大用): 

 
复制代码代码如下:
<?php   
 include("adodb/adodb.inc.php");  
$db = ADONewConnection('access');  
//这里access文件最好用绝对路径
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\\self\\myphp\\book.mdb;Uid=;Pwd=;";  
//下面这一行是连接 asp结尾的access文件
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\xampp\\htdocs\\ZZZZ\\php\\access\\hd.asp;Uid=;Pwd=;";  
//好像是不能连接 远程的access文件

$db->Connect($dsn);  
 $result = $db->Execute("SELECT * FROM data");  

 if ($result === false) die("failed");   
 while (!$result->EOF) {  
 for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)  
 print "<div style='border:1px solid #000000;'>".$result->fields[$i]." <br />";  
 $result->MoveNext();  

 }   
 ?> 

下面的更简洁的代码也是完全正确
<?php   
  
 include("adodb5/adodb.inc.php");  
$db = ADONewConnection('access');  
$dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\xampp\\htdocs\\ZZZZ\\php\\access\\cdba.mdb;Uid=;Pwd=;";  
$db->Connect($dsn);  
 $result = $db->Execute("SELECT * FROM xunpan order by ID desc");  
 
 if ($result === false) die("failed");   
 while (!$result->EOF) {  
  echo "ID:".$result->fields[0];
  echo "时间:".$result->fields[11];
  echo "专业:".$result->fields[1];
  echo "电话:".$result->fields[5].','.$result->fields[7];
  echo "QQ:".$result->fields[2];
  echo "姓名:".$result->fields[4];
  echo "<br />";
    $result->MoveNext();  
 
 }   
 ?> 

ADODB可以到这里去下载 http://phplens.com/phpeverywhere/
我下载下来了 ADODB 见附件 adb512.zip

来自 http://www.jb51.net/article/5815.htm
 


在PHP中连接access数据库的话我们必须ADO来连接,这跟ASP中连接数据库非常的类似.下边给出了一段DEMO供大家参考. 下面这个php要装 @new COM("ADODB.Connection")组件吧
复制代码代码如下:

<?PHP 
/* 
   创建ADO连接 
*/ 
$conn = @new COM("ADODB.Connection") or die ("ADO Connection faild."); 
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("DATUM/cnbt.mdb"); 
$conn->Open($connstr); 
/* 
创建记录集查询 
*/ 
$rs = @new COM("ADODB.RecordSet"); 
$rs->Open("select * from dbo_dirs",$conn,1,3); 
/* 
   循环读取数据 
*/ 
while(!$rs->eof){ 
echo $rs->Fields["title"]->Value; 
echo "<br/>"; 
$rs->Movenext();     //将记录集指针下移 
} 
$rs->close();  
$conn->close();
?>

来自  http://www.jb51.net/article/13955.htm


php ADODB操作access数据库的常用方法 - 某人2013



<?php

//定义数据库变量		
$DB_TYPE	 = "mysql";		
$DB_HOST	 = "localhost";		
$DB_USER	 = "root";		
$DB_PASS	 = "";		
$DB_DATABASE = "ai-part";		
require_once("../adodb/adodb.inc.php");		
$db = NewADOConnection("$DB_TYPE");//建立数据库对象		
$db->debug = true;//数据库的DEBUG测试,默认值是false		
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;//返回的记录集形式,关联形式		
/***	  
返回的记录集形式	  
define('ADODB_FETCH_DEFAULT',0);	  
define('ADODB_FETCH_NUM',1);	  
define('ADODB_FETCH_ASSOC',2);	  
define('ADODB_FETCH_BOTH',3);	   
以上常量,在adodb.inc.php里定义了,也就是可用"$ADODB_FETCH_MODE=2"方式	  
ADODB_FETCH_NUM   返回的记录集中的索引,是数字形式,即数据库字段的排序顺序值	  
ADODB_FETCH_ASSOC 返回的记录集中的索引,是原数据库字段名	  
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回以上两种。某些数据库不支持	  
An example:	   
  $ADODB_FETCH_MODE = ADODB_FETCH_NUM;	   
  $rs1 = $db->Execute('select * from table');	   
  $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;	   
  $rs2 = $db->Execute('select * from table');	   
  print_r($rs1->fields); # 返回的数组是: array([0]=>'v0',[1] =>'v1')	   
  print_r($rs2->fields); # 返回的数组是: array(['col1']=>'v0',['col2'] =>'v1')	   
***/	   

//连接数据库,方法有Connect,PConnect,NConnect,一般使用Connect		
if (!@$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {		
  exit('<a href="/">服务器忙,请稍候再访问</a>');		
}		

/*	  
$db->  $rs-> 此类的使用方法	  
Execute($sql),执行参数中的$sql语句	  
SelectLimit($sql,$numrows=-1,$offset=-1) $numrows:取几条记录,$offset,从第几条开始取,一般是用于分页,或只取出几条记录的时候用	  
*/	   
//Example: 取出多个记录		
$sql = "Select * FROM table orDER BY id DESC";		
if (!$rs = $db->Execute($sql)) {//执行SQL语句,并把结果返回给$rs变量		
  echo $db->ErrorMsg();//这个是打印出错信息		
  $db->Close();//关闭数据库		
  exit();		
}		
while (!$rs->EOF) {//遍历记录集		
  echo $rs->fields['username'] . '<br>';		
    //print_r($rs->fields)试试,$rs->fields['字段名'],返回的是这个字段里的值		
  $rs->MoveNext();//将指针指到下一条记录,否则出现死循环!		
}		
$rs->Close();//关闭以便释放内存		

//插入新记录		
$sql = "Insert table (user_type,username) VALUES (3, 'liucheng')";		
$db->Execute($sql);		

//更新记录		
$sql = "Update table SET user_type=3 Where id=2";		
$db->Execute($sql);		

//删除记录		
$sql = "Delete FROM table Where id=2";		
$db->Execute($sql);		

// 取单个记录		
//$db->GetRow($sql), 取第一条记录,并返回一个数组,出错返回false		
$sql = "Select username,password,user_type FROM table Where id=3";		
$data_ary = $db->GetRow($sql);		
if ($data_ary == false) {		
  echo '没有找到此记录';		
  exit();		
} else {		
  echo $data_ary['username'] . ' ' . $data_ary['password'] . ' ' . $data_ary['user_type'] . '<br>';		
}		

//另一种方法		
$sql = "Select username,password,user_type FROM table Where id=3";		
if (!$rs = $db->Execute($sql)) {		
  echo $db->ErrorMsg();		
  $db->Close();		
  exit();		
}		
if (!$result = $rs->FetchRow()) {		
  echo '没有找到此记录';		
  exit();		
} else {		
  echo $result['username'] . ' ' . $result['password'] . ' ' . $result['user_type'] . '<br>';		
}		

// 取单个字段		
//$db->GetOne($sql) 取出第一条记录的第一个字段的值,出错则返回false		
$sql = "Select COUNT(id) FROM table";		
$record_nums = $db->GetOne($sql);		
echo $record_nums;		
$sql = "Select username,password,user_type FROM table Where user_id=1";		
$result = $db->GetOne($sql);		
echo $result;//打印出username的值		
/*	  
在进行添加,修改,删除记录操作时,	  
要对字符串型的字段,使用$db->qstr()对用户输入的字符进行处理,	  
对数字型字段,要进行数据判断	  
更新记录,注意:这是针对php.ini中,magic_quotes被设置为Off的情况,如果不确定,可以使用	  
$db->qstr($content,get_magic_quotes_gpc())	  
注意:content= 等号右边,没有单引号	  
*/	   
$sql = "Update table SET content=" . $db->qstr($content) . " Where id=2";		
$db->Execute($sql);		

     
/*$db->Insert_ID(),无参数,返回刚刚插入的那条记录的ID值,仅支持部分数据库,带auto-increment功能的数据库,如PostgreSQL, MySQL 和 MS SQL	   
*/	   
//Example:		
$sql = "Insert table (user_type,username) VALUES (3, 'liucheng')";		
$db->Execute($sql);		
$data_id = $db->Insert_ID();		
echo $data_id;		

/*$db->GenID($seqName = 'adodbseq',$startID=1),产生一个ID值.$seqName:用于产生此ID的数据库表名,$startID:起始值,一般不用设置,它会把$seqName中的值自动加1.支持部分数据库,某些数据库不支持	  

Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入记录后,要马上得到它的ID时,才用	  
*/	   
/*Example:	  
先创建一个列名为user_id_seq的表,里面只有一个字段,id,int(10),NOT NULL,然后插入一条值为0的记录	  
*/	   
$user_id = $db->GenID('user_id_seq');		
$sql = "Insert table (id, user_type,username) VALUES (" . $user_id . ", 3, 'liucheng')";		
$db->Execute($sql);		

/*	  
$rs->RecordCount(),取出记录集总数,无参数	  
它好像是把取出的记录集,用count()数组的方法,取得数据的数量	  
如果取大量数据,效率比较慢,建议使用SQL里的COUNT(*)的方法	  
$sql = "Select COUNT(*) FROM table", 用此方法时,不要在SQL里加ORDER BY,那样会降低执行速度	  

Example:	  
*/	   
$sql = "Select * FROM table orDER BY id DESC";		
if (!$rs = $db->Execute($sql)) {		
  echo $db->ErrorMsg();		
  $db->Close();		
  exit();		
}		
$record_nums = $rs->RecordCount();		

/*	  
如果想对某一结果集,要进行两次同样的循环处理,可以用下面方法	  
以下,只是一个例子,只为说明$rs->MoveFirst()的使用方法	  
*/	   
$sql = "Select * FROM table orDER BY id DESC";		
if (!$rs = $db->Execute($sql)) {		
  echo $db->ErrorMsg();		
  $db->Close();		
  exit();		
}		
$username_ary = array();		
while (!$rs->EOF) {		
  $username_ary[] = $rs->fields['username']		
  echo $rs->fields['username'] . '<br>';//print_r($rs->fields)试试,$rs->fields['字段名'],返回的是这个字段里的值		
  $rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!		
}		
$username_ary = array_unique($username_ary);		

$rs->MoveFirst();//将指针指回第一条记录		
while (!$rs->EOF) {		
  echo $rs->fields['password'] . '<br>';//print_r($rs->fields)试试,$rs->fields['字段名'],返回的是这个字段里的值		
  $rs->MoveNext();//将指针指到下一条记录		
}		
$rs->Close();		

//当本页程序,对数据库的操作完毕后,要$db->Close();		
$db->Close();		

/*一个不错的方法 */	   
if (isset($db)) {		
  $db->Close();		
}		
?>

来自 http://www.tuicool.com/articles/AbUn2a

附件大小
Package icon adb512.zip714.55 KB
普通分类: