数据库管家----ADODB类库.
虽然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),才调用该函数.例如:
<?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类库.相关推荐
- ADODB类库——数据库管家
最近接手一个新型超大型项目,发现里面链接数据库时使用的时ADODB类库,百度了一番,发现它好比数据库管家,它可以链接多种类型数据库,比如mysql.server.pagesql等等其他数据库,这种数据 ...
- ADODB类库——数据库管家(一)
ADODB类库为一PHP访问数据库定义了一个轻量级.一致性的借口,它提供了一个数据访问抽象层.这样无论使用什么样的数据库,都可以通过一致性的函数执行查询和获取数据. ADODB中需要重点掌握的函数 名 ...
- ADODB类库操作查询数据表
ADODB类库下载:http://sourceforge.net/projects/adodb/files/adodb-php-4-and-5/adodb-491-for-php/adodb491.z ...
- vb adodb mysql_VB6实现连接Access数据库的ADODB代码实现方法
本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的, ...
- 无声的功勋之数据库管家KMonitor
凌晨四点,整座城市几乎都在沉睡的时刻,在一个毫不起眼的办公室里,老王娴熟地弹了弹烟灰,又猛地灌了一大口枸杞茶,连续值了一周夜班的老王虽一身倦意,但严肃又较真的眼神依然时不时地扫过面前的几个监控界面,随 ...
- 【关于VB连接EXCEL数据库以ADODB方式】
ADODB数据库连接EXCEL的故事 唐僧ADODB想熄灭火焰 大徒弟悟空ADODB.Connection能打开Open剧情找到铁扇公主EXCEL ADODB.Connection用Execute向公 ...
- PHP开发实例大全(基础卷) 适合菜鸟新手学习
<PHP开发实例大全(基础卷)>筛选.汇集了PHP开发从基础知识到高级应用各个层面的大量实例及源代码,共有600个左右,每个实例及源代码按实例说明.关键技术.设计过程.详尽注释.秘笈心法的 ...
- PHP数据库操作类ADODB 详解
2019独角兽企业重金招聘Python工程师标准>>> 17.4.4 ADODB的查询方法 ADODB的查询方法如下. 1.直接查询 Excute()方法通过连接句柄执行SQL查询, ...
- adodb/adodb.inc.php,php adodb连接不同数据库
php adodb连接不同数据库的实现代码. include("adodb/adodb.inc.php"); //包含adodb类库文件 $conn = NewADOConnect ...
最新文章
- [Js代码风格]浅析模块模式
- 计算机在管理会计应用中的作用,计算机在现代管理会计中的应用(共3736字).doc...
- ResNet及其变种的结构梳理、有效性分析与代码解读(PyTorch)
- python 字典和列表的遍历
- 删除virtual bridge
- python 实现两个excel表格数据的对比
- 读《别闹了,费曼先生》 时的几点想法
- java发包工具_小米范工具系列之四:小米范HTTP批量发包器
- 操作系统的概念,功能,作用
- linux系统输入数字 求最大值,写函数,输入n个数字输出最大值和最小值
- linux 终端分屏工具 tmux
- SAP High Avaliability offering
- 用STM32F407ZET6的HAL库写一个串口接收,发送代码,支持ringbuff
- 朴实无华的取证 (数字取证)
- Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)
- java三角形类_Java面向对象练习题之三角形
- vscode查看外部依赖包的源码
- jdbc url的配置
- 案例:丁三石挑战经典歌剧
- Vue项目中使用swiper插件开发3d轮播图
热门文章
- 深度学习(八)caffe源码学习-未完待续
- Convolutional Sequence to Sequence Learning笔记
- Ubuntu Docker 安装
- java将复选框添加到表格_Element表格嵌入复选框以及单选框
- api 文件夹index.js 集合写法
- MySQL笔记(六)视图 view
- 17.vue移动端项目二
- python copy与deepcopy (拷贝与深拷贝)
- 用递归方法判断字符串是否是回文(Recursion Palindrome Python)
- 使用gdb进行程序调试1-在GDB中运行程序