ADODB 是一种 PHP 存取不同类型数据库的抽象层
由于 PHP 的数据库存取函数没有标准化,所以我们需要一组函数库或是类来隐藏不同数据库函数接口间的差异,让我们可以很简单的去切换数据库,而这就是ADODB的目的。
ADODB 目前支持MySQL、Oracle、Microsoft SQL Server、Sybase、Sybase SQL Anywhere、Informix、PostgreSQL、FrontBase、Interbase(Firebird 及 Borland 版本)、 Foxpro、Access、ADO 和 ODBC。ADODB 也有透过 ODBC 成功连结 Progress 及 DB2 的报告,我们希望能有更的人提供驱动接口来支持更多的数据库。
PHP4 支持连结变量(session variables),使用者可以透过 ADODB 储存连结信息,以达成真正的可移植性及弹性,相关的用法及信息请自行参考 ADOdb-session.php
这个范例。
安装
首先要确定你所使用的PHP版本是 4.01pl2 或是之后的版本(因为ADODB使用到了 require_once
及 include_once
两个函数)。解压缩全部的档案到你的Web服务器可以存取的一个目录里。
要测试ADODB你需要一个数据库,开启 testdatabase.inc.php
这个档案,并且修改连结参数,以适合你所使用的数据库。这个程序会建立一个新的资料表在你的数据库中,以支持我们提供的测试程序及范例,就这样,你安装好了。
激活 ADODB
当要执行 ADODB 时,至少有两个档案要被载进来,第一个是 ADOdb.inc.php
,这里面包含了所有数据库类中要被使用的函数。而对数据库实作的程序代码则被置放在 ADOdb-????.inc.php
档案里。
例如说,要连结一个mysql数据库:
include('/path/to/set/here/ADOdb.inc.php');
$conn = &ADONewConnection('mysql');
无论何时你需要连结到一个数据库时,你必需使用 ADONewConnection()
函数建立了一个连结对象。ADONewConnection
接受一个选择性参数, <database-name-here>
。如果没有参数被指定,它将会使用被 ADOLoadCode()
所加载的最后一个数据库。 NewADOConnection()
是另一个相同的函数。
当你建立好一个连结对象时,你并没有真的连结上你的数据库。你仍需要使用$conn->Connect()
或者 $conn->PConnect()
两个方法来完成真正的连结。
支持的数据库
名称 | 状 | 数据库 | RecordCount() 支持与否 | 需安装的驱动程序 | 操作系统 |
access | B | Microsoft Access/Jet. 需要建立一个 ODBC/DSN。 | Y/N | ODBC | Windows only |
ado | B | 一般未经特别指定的数据库系统, 透过ADO,允许不设定 DSN连结,使用OLEDB以提供较佳的效能。 | 视数据库而定 | ADO or OLEDB provider | Windows only |
ado_access | B | Microsoft Access/Jet 透过ADO,允许不设定 DSN连结,使用OLEDB以提供较佳的效能。 | Y/N | ADO or OLEDB provider | Windows only |
ado_mssql | B | Microsoft SQL Server 透过ADO,允许不设定 DSN连结,使用OLEDB以提供较佳的效能。 | Y/N | ADO or OLEDB provider | Windows only |
db2 | C | DB2. 可以透过ODBC获得可以信赖的运作效果。 | Y/N | DB2 CLI/ODBC interface | Unix and Windows Unix install hints. |
vfp | A | Microsoft Visual FoxPro 需要建立一个ODBC/DSN | Y/N | ODBC | Windows only |
fbsql | C | FrontBase. | Y | ? | Unix and Windows |
ibase | B | Interbase 6或更早的版本。有些使用者报告必需使用如下的方式连结$db->PConnect('localhost:c:/employee.gdb',"sysdba","masterkey") 目前没有支持 Affected_Rows 方法 | Y/N | Interbase client | Unix and Windows |
firebird | C | interbase的Firebird版本 | Y/N | Interbase client | Unix and Windows |
borland_ibase | C | Borland 的 Interbase 6.5 或更新版 | Y/N | Interbase client | Unix and Windows |
informix | C | Informix | Y/N | Informix client | Unix and Windows |
mssql | A | Microsoft SQL Server 7 也可以和 Microsoft SQL Server 2000 运作的很好。 但在日期格式上仍有一些问题。 例如在日期时间的回传值上,就不会回传秒数数值。 | Y/N | Mssql client | Unix and Windows Unix install howto. |
mysql | A | MySQL 不支持交易处理 | Y/N | MySQL client | Unix and Windows |
mysqlt 或 maxsql | A | MySQL 支持交易处理 | Y/N | MySQL client | Unix and Windows |
oci8 | A | Oracle 8/9 支持比 oracle 驱动程序还多的功能 (例如: Affected_Rows)。 在连结之前,你可能需要先配好环境变量 ORACLE_HOME = '' 有两个方式进行连结,用服务器的IP或服务名称:
| Y/N | Oracle client | Unix and Windows |
oci8po | A | Oracle 8/9 可携式驱动程序 | Y/N | Oracle client | Unix and Windows |
odbc | A | 标准 ODBC 用 PConnect('DSN','user','pwd').连结。 | depends on database | ODBC | Unix and Windows. Unix hints. |
odbc_mssql | C | 用 ODBC 连接 MSSQL | Y/N | ODBC | Unix and Windows. |
odbc_oracle | C | 用 ODBC 连接 ORACLE | Y/N | ODBC | Unix and Windows. |
oracle | C | 支持旧的 Oracle 7 client API 不支持 $ADODB_FETCH_MODE | Y/N | Oracle client | Unix and Windows |
postgres | A | PostgreSQL 不支持 LIMIT 指令. | Y | PostgreSQL client | Unix and Windows. |
postgres7 | A | PostgreSQL 支持 LIMIT 及其它版本 7 功能 | Y | PostgreSQL client | Unix and Windows. |
sqlanywhere | C | Sybase SQL Anywhere. | Y/N | SQL Anywhere ODBC client | |
sybase | C | Sybase. | Y/N | Sybase client | Unix and Windows Unix hints |
测试状态区的代码说明如下:
- A=已经经过很多人验证及测试,可靠度最高。
- B=已经测试并使用了,但可能仍有一些功能没有达成。
- C=使用者自行配置或试用的驱动程序,可能没有完全支持ADODB的功能。
RecordCount()
支持与否:指的是 RecordCount()
函数是否会回传用SELECT指令取得的记录笔数(不支持时传回 -1
)。如果这个字段的值出现了 Y/N
,那表示当全域变量 $ADODB_COUNTER = true
时,会以仿真的方式取得,而这是默认值。要注意的是,如果你预测记录笔数会很大时,最好把这个值设为 false
,也就是关掉这个仿真功能,因为这会耗掉非 常多的内存,以做为快取之用。由于这个变量在每次执行时都会检查,所以你可以选择性的使用或不使用。
所有支持 $ADODB_FETCH_MODE
的数据库都支持 ADODB_FETCH_NUM
(以字段顺序存取) 及 ADODB_FETCH_ASSOC
(以字段名称存取),两种模式。而将值设为 ADODB_FETCH_DEFAULT
(数据库预设模式存取),则是由数据库的功能来决定的,所以不具备可移植性,而 ADODB_FETCH_BOTH
(双模式存取) 也一样。
相关链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论