Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2105693
  • 博文数量: 194
  • 博客积分: 6450
  • 博客等级: 准将
  • 技术积分: 2085
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-06 13:39
文章分类

全部博文(194)

文章存档

2013年(38)

2012年(11)

2011年(1)

2010年(1)

2009年(4)

2008年(13)

2007年(18)

2006年(63)

2005年(45)

我的朋友

分类:

2006-02-17 09:44:04

ADODB的优点有这几个(网上说的,不是我说的):
1、速度比pear快一倍;
2、支持的数据库类型比pear多很多,甚至可以支持ACCESS;
3、无须安装,无须服务器支持(对新手来说,这点很重要吧)
不知道adodb是什么或是想下载adodb的朋友可以去这个链接看看:
另外,如果哪位兄弟翻译了README的全文或知道哪里有译文请给我回个帖,谢谢。
Tutorial 
Example 1: Select Statement 
任务: 连接一个名为Northwind的Access数据库, 显示 每条记录 的前两个字段. 


在这个实例里, 我们新建了一个ADOC连接(ADOConnection)对象, 并用它来连接一个数据库. 这个连接采用 PConnect 方法, 这是一个持久 连接. 当我们要查询数据 库时, 我们可以随时调 用这个连接的Execute()函数. 它会返回一个 ADORecordSet对象  which is actually a cursor that holds the current row in the array fields []. 我们使用MoveNext()从一个记录转向下一个记录 . 


NB: 有一 个非常实用的函数 SelectLimit在本例中没有用到, 它可以控制显示的记录数(如只显示前十条记录 ,可用作分页显示 wink.gif






code:

include('adodb.inc.php'); #载入ADOdb 
$conn = &ADONewConnection('access'); # 新建一个连接 
$conn->PConnect('northwind'); # 连接到一个名为northwind的MS-Access数据库 
$recordSet = &$conn->Execute('select * from products'); #从products数据表中搜索所有数据 
if (!$recordSet) 
print $conn->ErrorMsg(); //如果数据搜索发生错误显示错误信息 
else 
while (!$recordSet->EOF) { 
print $recordSet->fields[0].' '.$recordSet->fields[1].'
'; 
$recordSet->MoveNext(); //指向下一个记录 
} //列表显示数据 


$recordSet->Close(); //可选 
$conn->Close(); //可选 
?> 


$recordSet在$recordSet->fields中返回当前数组, 对字段进行数字索引(从0开始). 我们用 MoveNext() 函数移动到下一个记录 . 当数据库搜索到结尾时EOF property被 设置 为true. 如果Execute()发生错 误 , recordset返回flase. 


$recordSet->fields[]数组产生于PHP的数据库扩展。有些数据库扩展只能按数字索引而不能按字段名索引.如果坚 持要使用字段名索引,则应采用SetFetchMode函数.无论采用哪种格式索引,recordset都可以由Execute()或 SelectLimit()创建。 







code:
$db->SetFetchMode(ADODB_FETCH_NUM); 
$rs1 = $db->Execute('select * from table'); //采用数字索引 
$db->SetFetchMode(ADODB_FETCH_ASSOC); 
$rs2 = $db->Execute('select * from table'); //采用字段名索引 
print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1') 
print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')
如果要获取记录号,你可以使用$recordSet->RecordCount()。如果没有当前记录则返回-1。 


实例 2: Advanced Select with Field Objects 
搜索表格,显示前两个字段. 如果第二个字段是时间或日期格式,则将其改为美国标准时间格式显示. 






code:

include('adodb.inc.php'); ///载入adodb 
$conn = &ADONewConnection('access'); //新建一个连接 
$conn->PConnect('northwind'); //连接名为northwind的MS-Access数据库 
$recordSet = &$conn->Execute('select CustomerID,OrderDate from Orders'); //从Orders表中搜索CustomerID和OrderDate两个字段 
if (!$recordSet) 
print $conn->ErrorMsg(); //如果数据库搜索错误,显示错误信息 
else 
while (!$recordSet->EOF) { 
$fld = $recordSet->FetchField(1); //把第二个字段赋值给$fld 
$type = $recordSet->MetaType($fld->type); //取字段值的格式 


if ( $type == 'D' || $type == 'T') 
print $recordSet->fields[0].' '. 
$recordSet->UserDate($recordSet->fields[1],'m/d/Y').'
'; //如果字段格式为日期或时间型,使其以美国标准格式输出 
else 
print $recordSet->fields[0].' '.$recordSet->fields[1].'
'; //否则以原样输出 


$recordSet->MoveNext(); //指向下一个记录 

$recordSet->Close(); //可选 
$conn->Close(); //可选 
?>


在这个例子里, 我们用FetchField()函数检查了第二个字段的格式. 它返回了一个包含三个变量的对象 


name: 字段名 
type: 字段在其数据库中的真实格式 
max_length:字段最大长度,部分数据库不会返回这个值,比如MYSQL,这种情况下max_length值等于-1. 
我们使用MetaType()把字段的数据库格式转化为标准的字段格式 


C: 字符型字段,它应该可以在标签下显示. 
X: 文本型字段,存放比较大的文本,一般作用于'; tpl += '

'; tpl += '
'; tpl += '
'; tpl += ''; tpl += '
'; tpl += '
'; tpl += '
'; $('.z_move_comment').html(''); $(this).parents('.Blog_right1_8').find('.z_move_comment').html(tpl).show(); }); //引用的评论提交 $('#quota_sbumit').live('click' , function(){ if(isOnLine == '' ) { //showErrorMsg('登录之后才能进行此操作' , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', 'http://account.chinaunix.net/login'); return false; } var bid = $(this).attr('bid'); var tid = $(this).attr('tid');//被引用人的id var qid = $(this).attr('cid');//引用的id var url = $(this).attr('url'); var text = $('#rmsg').val(); var tname = $(this).attr('tname'); if(text == '' || text=='文明上网,理性发言...') { showErrorMsg('评论内容不能为空!' , '消息提示'); return false; } else { if(mb_strlen(text) > 1000){ showErrorMsg('评论内容不能超过500个汉字' , '消息提示'); return false; } } $.ajax({ type: "post", url: url , data: {'bid': bid , 'to' : tid , 'qid' : qid , 'text': text , 'tname' : tname }, dataType: 'json', success: function(data){ if(data.code == 1){ var tpl = '
'; tpl+= ''; tpl+= '
'; tpl+= '

' + data.info.username + '' + data.info.dateline + '

'; tpl+= '

' + data.info.quota.username + ':'+ data.info.quota.content + '

'; tpl+= '

' + data.info.content + '

回复 |  删除 |  举报
'; tpl+= ''; tpl+= '
'; $('#replyList .Blog_right1_8:first').before(tpl); $('.z_move_comment').html('').hide(); } else if(data.code == -1){ //showErrorMsg(data.info , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', 'http://account.chinaunix.net/login'); } }, error: function(){//请求出错处理 } }); }); //底部发表评论 $('#submitmsg').click(function(){ if(allowComment == 1) { showErrorMsg('该博文不允许评论' , '消息提示'); return false; } var bid = $(this).attr('bid'); var toid = $(this).attr('toid'); var text = $('#reply').val(); var url = $(this).attr('url'); if(text == '' || text=='文明上网,理性发言...') { showErrorMsg('评论内容不能为空!' , '消息提示'); return false; } else { if(mb_strlen(text) > 1000){ showErrorMsg('评论内容不能超过500个汉字' , '消息提示'); return false; } } $.ajax({ type: "post", url: url , data: {'bid': bid , 'to' : toid ,'text': text}, dataType: 'json', success: function(data){ if(data.code == 1) { var tpl = '
'; tpl += ''; tpl += '
'; tpl += '

' + data.info.username + '' + data.info.dateline + '

'; tpl += '

' + data.info.content + '

'; tpl += '
回复 |  删除 |  举报
'; tpl += ''; tpl += '
'; $('.Blog_tit3:first').after(tpl); $('#reply').val('文明上网,理性发言...'); } else if(data.code == -1) { showErrorMsg(data.info , '消息提示'); } }, error: function(){//请求出错处理 } }); }); //底部评论重置 $('#reset_comment').click(function(){ $('#reply').val('文明上网,理性发言...'); }); //取消回复 $('#qx_comment').live('click' , function(){ $('.z_move_comment').html('').hide(); }); $('#rmsg, #reply').live({ focus:function(){ if($(this).val() == '文明上网,理性发言...'){ $(this).val(''); } }, blur:function(){ if($(this).val() == ''){ $(this).val('文明上网,理性发言...'); } } }); //删除留言确认 $('.comment_del_mark').live('click' , function(){ var url = $(this).attr('url'); asyncbox.confirm('删除留言','确认', function(action){ if(action == 'ok') { location.href = url; } }); }); //删除时间确认 $('.del_article_id').click(function(){ var delurl = $(this).attr('delurl'); asyncbox.confirm('删除文章','确认', function(action){ if(action == 'ok') { location.href = delurl; } }); }); /* //字数限制 $('#rmsg, #reply').live('keyup', function(){ var id = $(this).attr('id'); var left = Util.calWbText($(this).val(), 500); var eid = '#errmsg'; if(id == 'reply') eid = '#rerrmsg'; if (left >= 0) $(eid).html('您还可以输入' + left + '字'); else $(eid).html('您已超出' + Math.abs(left) + ''); }); */ //加载表情 $('#face').qqFace({id : 'facebox1', assign : 'reply', path : '/image/qqface/'}); $('#mface').qqFace({id : 'facebox', assign : 'rmsg', path:'/image/qqface/'}); /* $('#class_one_id').change(function(){ alert(123213); var id = parseInt($(this).val() , 10); if(id == 0) return false; $('.hidden_son_class span').each(function( index , dom ){ if( dom.attr('cid') == id ) { } }); }); */ //转载文章 var turn_url = "/blog/viewClassPart.html"; $('#repost_bar').click(function(){ if(isOnLine == '' ) { //showErrorMsg('登录之后才能进行此操作' , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', 'http://account.chinaunix.net/login'); return false; } var id = $(this).attr('bid'); asyncbox.open({ id : 'turn_class_thickbox', url : turn_url, title : '转载文章', width : 330, height : 131, scroll : 'no', data : { 'id' : id }, callback : function(action){ if(action == 'close'){ $.cover(false); } } }); }); /* //转发文章 $('#repost_bar').live('click' , function(){ if(isOnLine == '' ) { //showErrorMsg('登录之后才能进行此操作' , '消息提示'); showErrorMsg('操作失败,您需要先登录!', '消息提示', 'http://account.chinaunix.net/login'); return false; } var bid = $(this).attr('bid'); var url = $(this).attr('url'); asyncbox.confirm('转载文章','确认', function(action){ if(action == 'ok'){ $.ajax({ type:"POST", url:url, data: { 'bid' : bid }, dataType: 'json', success:function(msg){ if(msg.error == 0){ showSucceedMsg('转发成功!', '消息提示'); }else if(msg.error == 1){ //location.href = '/index.php?r=site/login'; showErrorMsg('操作失败,您需要先登录!', '消息提示', 'http://account.chinaunix.net/login'); }else{ showErrorMsg(msg.error_content, '消息提示'); } } }); } }); }); */ });