虽然php是构建web的强有力工具,但是由于php的存储函数并没有标准化.这导致在不同数据库间的函数名称和参数有很大的差异,更换数据库也将带来大量的代码修复工作.adodb类库就是为了解决这个问题而产生. adodb作为php程序和数据库间的中间层,为访问数据库定义了一个轻量级的,一致性的接口,他提供了一个数据访问的抽象层.

<ADODB概述>

  ADODB 是active data objects data base 的缩写,是一中php存取数据库的中间函数式组件.adodb 支持的数据库种类有很多,如mysql,postgerSQL,interbase,informix,Oracle,MS SQL7,foxpro,access,ado ,sybase,DB2以及一般的ODBC.

  ADODB的优点:

    a.不管后台使用何种数据库,存取数据库的方式都是一致的.这简化了开发人员学习另一套知识的时间,同时在转移数据库的时候,也不必作很大的改变.

    b. 可以生成smarty循环需要的二维数组,简化smarty开发,同时还支持缓存查询,尽可能提高查询速度.

  ADODB的缺点:

    缺点就是执行效率慢.为了适用于众多数据库,这导致了类库非常庞大.只是主执行类(adodb.inc.php)就有120KB(后续还将继续变化),因此使用该类库的时候,应充分考虑这一点.

ps.ADODB的安装方法是先从 http://sourceforge.net/projects/adodb/files/中下载数据包解压,然后将其复制到程序的指定目录下,最后使用include语句在程序中包含文件.使用ADODB,PHP版本必须为4.01以上.

<ADODB执行步骤>

  1.载入adodb.inc.php文件,启动ADODB.

  2.使用ADONewConnection()函数连接数据库服务器.

    ADODB连接数据库系统使用的是ADONewConnection()函数.连接数据库时,如果选择持久化连接则使用PConnect()函数,如果选择非持久化连接则使用Connect()函数.

    ADONewConnection()函数连接数据库系统,语法如下:

ADONewConnection($databaseType);//$databaseType 代表连接的数据库系统的名称,如:mysql,mssql等.

  3.使用PConnect()函数连接数据库.   

  应用PConnect()函数实现与数据库的持久化连接.语法如下:

PConnect($host,[$user],[$password],[$database]);//$host:数据库系统的服务器所在地址.如果是本机操作,参数为localhost;//$user:数据库用户名.//$password:数据库密码.//$database:用到的数据库.

  应用函数Connect()函数非持久化连接数据库.其语法如下:

Connect($host,[$user],[$password],[$database]);//同上.

ps: 持久化与非持久化的区别:

  持久化连接是不用每次都创建新的连接,可以增加程序的执行速度,但有些数据库不支持持久化连接.如果遇到不支持持久化连接的数据库,可以使用Connect()函数代替PConnect();

  4.定义结果集的存取方式.

    公共变量

    ADODB中的公共变量不但可以控制结果集的存取方式,而且可以自动模拟select指令返回的记录总数和设置缓存目录.公共变量有:

  $ADODB_COUNTREECS变量

    当变量设置为true时,RecordCount()函数会在数据库驱动不支持select指令返回的记录总数时进行自动模拟,返回记录数,默认值为true.每次进行查询操作时都会自动检查变量的值.由于此功能十分消耗内存,因此不建议使用.

  $ADODB_CACHE_DIR变量

    改变量可以设置缓存目录,一般在使用缓存函数时会用到:如:CacheExecute()函数.

  $ADODB_FETCH_MODE变量

    可以控制结果集的存取方式,变量的参数表如下:

  参   数  表          说      明     
  define( ' ADODB_FETCH_DEFAULT ' , 0 )       默认值,在未设置该变量时使用.注意:不同类型数据区驱动的默认值是不同的.
  define( ' ADODB_FETCH_NUM ' , 1 )  设置的结果集 以"字段序号" 为索引进行存取.如:$rst -> fields[0] 和 $rst -> fields[1] 
  define( ' ADODB_FETCH_ASSOC ' , 2 )  设置的结果集 以"字段名称 "为索引进行存取.如:$rst -> fields[name] 和 $rst -> fields[ age] 
  define( ' ADODB_FETCH_BOTH ' , 3 )  同时支持NUM 和 both 的参数. .注意:不同类型数据区驱动的默认值是不同的,不建议使用.

  5.定义SQL,执行数据库操作

  ADODB 执行数据库更新,增加的操作方法有两种.一种是直接定义sql语句,调用execute()函数来执行;另外一种是调用ADODB提供的函数来完成.

  execute()函数.

    在众多操作SQL语句的方法中, execute()函数是最为常用的一个,它执行sql语句,成功则返回一个结果集(ADORecordSet),失败则返回false.语法如下:

execute( $sql [ , $inputarr=false]);//$sql 指定要执行的sql语句.// $inputarr: 用于设置传入的结合变量,如果没有设置$inputarr, $sql为普通的SQL语句.

  ps:使用结合绑定变量,可以加速sql指令编译以及读取的速度,提高效率.

  提高:

  将查询到的结果保存到缓存中,使用CacheExecute()函数,该函数不但具有execute()的功能,还能将查询到的结果保存到缓存中去.下一次查询,如果存在相同的查询,就可以直接从缓存中获取.

  应用selectLimit()函数控制select查询语句的起始位置.

    mysql数据库中有一个limit关键字,通过它可以控制查询语句从第几条记录开始查询,查询多少条记录.ADODB中的SelectLimit()函数模拟了limit关键字.语法格式如下:

SelectLimit( $sql [$numrows=-1] [,$offset = -1] [, $inputarr = false] );// $sql: 要执行的select 查询语句.// $numrows: 要查询的记录数.如果该值为-1,则查询到最后一条记录.// $offset: 表示从第几条记录开始查询.// $inputarr: 结合变量.

  SelectLimit() 也有一个可以将查询结果保存到缓存中的函数 CacheSelectLimit(),该函数将查询到的结果保存到缓存中去.下一次查询,如果存在相同的查询,就可以直接从缓存中获取. 该函数只是增加了一个控制缓存数据存储时间的$sec参数.语法如下:

CacheSelectLimit([$sec,] $sql [$numrows=-1] [,$offset = -1] [, $inputarr = false] );

提高:清除ADODB的缓存.

  前面我们知道支持缓存功能的两个函数,当然也有清除缓存的方法:

    第一种方法:让缓存超过保存缓存时所设置的时间,超过缓存时间,系统将会自动清除.

    第二种方法:调用CacheFlush()函数,它可以清除ADODB中所有的缓存.

ADODB提供的函数:

  应用GetInsertSQL(),GetUpdateSQL()函数增加,更新数据.

  1.使用GetInsertSQL()函数向数据库中添加新的记录.语法如下:

GetInsertSQL( &$rs , $arrFields );//参数$rs 用于设置要添加记录的结果集//参数 $arrFields用于设置新记录的字段值及字段名称.

  2.使用GetUpdateSQL()函数更新数据库中指定的记录.语法如下:

GetUpdateSQL( &$rs , $arrFields , $forceUpdate =false );//$rs: 用于指定要更新的结果集//$arrFields: 指定要更新的字段和内容.//$forceUpdate: 控制更新操作是否执行.如果 该值为true,则无论 $rs,$arrFields 的值是否相等都将更新.

扩展:操作sql语句的其他方法

  除了常用的方法调用sql语句外,还有一些方法能够实现特殊的操作,这些方法用得相对较少.

  函数语法  说 明
DBDate($date) 实现不同数据库之间时间格式的转换.如mysql数据库使用的时间是Y-M-D,而 oracle 则为 D-M-Y.参数$date 是要存储的时间.
qstr($string) 使用引号来处理字符串.例如.一个字符串包含了单引号" ' ",在mysql 中可以直接使用" ' "表示,但在其他数据库中则使用" '' "表示.使用qstr()函数可以解决这个问题.
affected_rows()  该函数用于获取最后更新或被删除的记录数.如果数据库不支持,则返回false.
Insert_ID()   返回最后插入的记录Id 值.如果数据库不支持,则返回false.

  

  6.获取结果集.

    对sql语句进行操作后多数会返回一个结果集(ADORecordSet对象).通过对改对象进行各种操作.要对其进行操作,

  首先要确认结果集中指针的位置.控制指针的方法说明如下:

方法 说                明
fields 变量   保存当前指针所指向的记录.  
EOF  变量   记录当前指针所指向是否为最后一条记录.如果是返回true,否则返回false.
MoveNext()函数   将当前指向指针指向下一条记录.
Move($to)函数 将当前的执行指针移动到结果集的知道位置.如果$to=0,则指向第一条,如果$to的值大于结果集的记录数,则指向最后一条.
MoveFirst()函数   将指向指针移动到第一条记录,等价于Move(0);
MoveLast()函数. 将指向指针移动到最后一条记录,等价于Move(RecordCount()-1);

    控制结果集内容的方法.方法说明如下:

方法 说        明
CurrentRow   返回当前指针所指的记录序号.第一条记录为0.  
FieldCount()   返回结果集中的字段数
RecordCount()   返回结果集中的记录数.
GetArray([$number_of_rows])   返回从当前指针开始,到($number_of_rows -1)行的全部记录的数组.$number_of_rows是给出的记录行.如果没有,则一直到EOF才停止.
FetchRow()   返回当前指针指向的记录的数组,如果是EOF,返回false.FetchRow()不要与MoveNext()混用.
FetchField($cloumn_number) 返回一个对象,包括字段$cloumn_number的名称和空间长度等相关信息.$cloumn_number 用于指定要查看的字段名称.
FetchNextObject( [$toupper = true] )   返回当前指针所指向的记录的对象形式,并且指针自动下移一行.$toupper值为true,则字段名为大写形式.
UserData($str , [$fmt]) 将日期字符串$str转换为$fmt设置的日期格式.$str为被转换的日期格式,$fmt 为要转换成的日期格式.默认为Y-m-d
UserTimeStamp( $str,[$fmt]) 将时间字符串$str转换为$fmt设置的时间格式.$str为被转换的时间格式,$fmt 为要转换成的时间格式.默认为Y-m-d H:i:s
MetaType($nativeDBType [,$field_max_length] ,[$fieldobj])   不同的数据库对相同的数据类型有不同的表示方法.如支持超长文本的类型,有这些表示方法:text,long character,clob 等.此函数将这些表示方法统一起来.如D(日期),T(时间),C(字符)等.$nativeDBType 表示数据表中的数据类型, $field_max_length 表示字段的最大长度 ,$fieldobj用于表示字段对象.

 MetaType()函数支持的标准化数据类型:

  数据类型         含    义    
C 支持 char ,varchar等字符类型
X 支持text,long character等长类型  
B blob 或binary image类型
D 日期类型.
T 时间类型timestamp
L 逻辑类型和位类型.
N 包含编号,整型和浮点型等数字类型
R 好汉序列和自动增加整数等序列类型.

  7.关闭连接.

    关闭连接当然是调用close()方法.如$conn ->close();  //^_^

<ADODB中的分页.>

  ADODB有属于自己的分页函数,它完美的解决了ADODB浏览大量数据的问题.分页函数如下:

  函  数     说  明  
PageExecute( $sql, $nrows, $page ) 执行分页功能.参数 $sql 用于指定查询语句;$nrows 为每页显示的记录数;$page 用于获取当前页码,默认为1.
CachePageExecute( $sec, $sql, $nrows, $page )   见名知义,它不但有PageExecute()的功能,而且可以将其存储到缓存中,并且在$sec 秒内重复查询,则在缓存中存取数据.
AbsolutePage($page = -1)             返回当前的页数.它需要与PageExecute()函数配合使用.
AtFirstPage( $status = '')     如果当前页是第一页,则返回ture.它需要与PageExecute()函数配合使用.
AtLastPage( $status = '') 如果当前页是最后一页,则返回ture.它需要与PageExecute()函数配合使用.

扩展:一个小巧的分页函数.ADODB_Pager()函数.

  ADODB_Pager()函数 是ADODB_Pager类中的一个构造函数,通过类中的Render()函数可以实现分页功能.语法如下:

ADODB_Pager( $conn, $sql, $id = 'adodb', $showPagelinks=false);//id:每个分页的id 号;//$showPagelinks:用于设置是否显示每个分页的连接,默认为false.

  实现该分页函数的前提条件就是:要包含adodb中的adodb.inc.php 和adodb-pager.inc.php文件.

  

<错误处理.>

  操作过程中,难免会出现错误.ADODB处理和调试错误的方法有:

  1. debug变量.

    如果变量被设置为true,那么当有输出操作时,同时也输出调试信息(debug 被启动,则会自动调用 ErrorMessage() 函数.).

  2. ErrorMessage()

    ErrorMessage()函数返回最后的状态或者出错信息.即使没有错误信息发生,也会返回一个字符串.所以一般情况下,只有在发生错误时(返回false),才调用该函数.例如:

View Code

<?phpinclude_once('conn/conn.php');$conn -> debug =true;$sql = ' select * form tb_user '; //关键字from ,此处出错.$rst = $conn -> execute( $sql ) or dir( $conn -> errorMsg());
?>

ps.整理得有点乱...

转载于:https://www.cnblogs.com/try2do-neo/archive/2012/09/24/2698609.html

数据库管家----ADODB类库.相关推荐

  1. ADODB类库——数据库管家

    最近接手一个新型超大型项目,发现里面链接数据库时使用的时ADODB类库,百度了一番,发现它好比数据库管家,它可以链接多种类型数据库,比如mysql.server.pagesql等等其他数据库,这种数据 ...

  2. ADODB类库——数据库管家(一)

    ADODB类库为一PHP访问数据库定义了一个轻量级.一致性的借口,它提供了一个数据访问抽象层.这样无论使用什么样的数据库,都可以通过一致性的函数执行查询和获取数据. ADODB中需要重点掌握的函数 名 ...

  3. ADODB类库操作查询数据表

    ADODB类库下载:http://sourceforge.net/projects/adodb/files/adodb-php-4-and-5/adodb-491-for-php/adodb491.z ...

  4. vb adodb mysql_VB6实现连接Access数据库的ADODB代码实现方法

    本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的, ...

  5. 无声的功勋之数据库管家KMonitor

    凌晨四点,整座城市几乎都在沉睡的时刻,在一个毫不起眼的办公室里,老王娴熟地弹了弹烟灰,又猛地灌了一大口枸杞茶,连续值了一周夜班的老王虽一身倦意,但严肃又较真的眼神依然时不时地扫过面前的几个监控界面,随 ...

  6. 【关于VB连接EXCEL数据库以ADODB方式】

    ADODB数据库连接EXCEL的故事 唐僧ADODB想熄灭火焰 大徒弟悟空ADODB.Connection能打开Open剧情找到铁扇公主EXCEL ADODB.Connection用Execute向公 ...

  7. PHP开发实例大全(基础卷) 适合菜鸟新手学习

    <PHP开发实例大全(基础卷)>筛选.汇集了PHP开发从基础知识到高级应用各个层面的大量实例及源代码,共有600个左右,每个实例及源代码按实例说明.关键技术.设计过程.详尽注释.秘笈心法的 ...

  8. PHP数据库操作类ADODB 详解

    2019独角兽企业重金招聘Python工程师标准>>> 17.4.4 ADODB的查询方法 ADODB的查询方法如下. 1.直接查询 Excute()方法通过连接句柄执行SQL查询, ...

  9. adodb/adodb.inc.php,php adodb连接不同数据库

    php adodb连接不同数据库的实现代码. include("adodb/adodb.inc.php"); //包含adodb类库文件 $conn = NewADOConnect ...

最新文章

  1. [Js代码风格]浅析模块模式
  2. 计算机在管理会计应用中的作用,计算机在现代管理会计中的应用(共3736字).doc...
  3. ResNet及其变种的结构梳理、有效性分析与代码解读(PyTorch)
  4. python 字典和列表的遍历
  5. 删除virtual bridge
  6. python 实现两个excel表格数据的对比
  7. 读《别闹了,费曼先生》 时的几点想法
  8. java发包工具_小米范工具系列之四:小米范HTTP批量发包器
  9. 操作系统的概念,功能,作用
  10. linux系统输入数字 求最大值,写函数,输入n个数字输出最大值和最小值
  11. linux 终端分屏工具 tmux
  12. SAP High Avaliability offering
  13. 用STM32F407ZET6的HAL库写一个串口接收,发送代码,支持ringbuff
  14. 朴实无华的取证 (数字取证)
  15. Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)
  16. java三角形类_Java面向对象练习题之三角形
  17. vscode查看外部依赖包的源码
  18. jdbc url的配置
  19. 案例:丁三石挑战经典歌剧
  20. Vue项目中使用swiper插件开发3d轮播图

热门文章

  1. 深度学习(八)caffe源码学习-未完待续
  2. Convolutional Sequence to Sequence Learning笔记
  3. Ubuntu Docker 安装
  4. java将复选框添加到表格_Element表格嵌入复选框以及单选框
  5. api 文件夹index.js 集合写法
  6. MySQL笔记(六)视图 view
  7. 17.vue移动端项目二
  8. python copy与deepcopy (拷贝与深拷贝)
  9. 用递归方法判断字符串是否是回文(Recursion Palindrome Python)
  10. 使用gdb进行程序调试1-在GDB中运行程序