| 以下为为已定义的常数: define(''''ADODB_FETCH_DEFAULT'''',0); define(''''ADODB_FETCH_NUM'''',1); define(''''ADODB_FETCH_ASSOC'''',2); define(''''ADODB_FETCH_BOTH'''',3); 以下为一个使用的例子: $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'''')在本范例中,如你所见两个数据集在被Execute()建立时,会依据 $ADODB_FERCH_MODE 的值来决定保存及使用的存取模式。 如果没有任何的模式被设定,预设值则是 ADODB_FETCH_DEFAULT。呈现的模式则依据数据库驱动程序而有所不同。为了可携性,我们建议你固定为 ADODB_FETCH_NUM 及 ADODB_FETCH_ASSOC,因为有许多驱动程序并不支持 ADODB_FETCH_BOTH 。
ADOConnection提供连接数据库,执行SQL指令以及一组准格式化的SQL相关函数等功能的物件。 ADOConnection 属性databaseType: 要连接的数据库系统名称,如 odbc,mssql,mysql┅等。详细内容请参考上表。 dataProvider: 下层的数据库结结机制,除了使用 odbc 或 ado 外,一般正常会设为 native。 host: 数据库主机名称,可用IP或来源名称(DSN)进行连接。如203.74.225.22 , dbs1.nukepro.com , "localhost" , "odbc_dsn1" database: 数据库或连接名称,如果使用了 ado,则会控制 ado 数据提供驱动程序(ado data provider)。 user: 登入时的 ID,密码则基于安全考量没有保留。 raiseErrorFn: 允许你定义一个错误处理函数,请参考 ADOdb-errorhandler.inc.php 的范例. debug: 被设定为 true 时,会显示除错信息。 concat_operator: 连接运算元,一般会设为 ''''+'''' 或 ''''||''''。这个运算元是为了在 SQL 里连接字串的。会在 Concat 函数中被用到。 fmtDate: 日期格式,在DBDate函数中会使用到,做为送日期数据到数据库的依据。在Access格式为''''#Y-m-d#'''',在MySQL格式为"\Y-m-d\"。 fmtTimeStamp: 时间格式,在 DBTimeStamp 函数中要送时间数据到数据库时会使用到。 true: 数据中真值的表现方式,如在Foxpro用''''T'''',MS SQL用''''1''''。 false: 数据中假值的表现方式,如在Foxpro用''''F'''',MS SQL用''''0''''。 replaceQuote: 这个字串用来处理逸出符号。例如在 Microsoft SQL 里的双引号,MySQL里的反斜线符号。主要使用于 qstr 。 autoCommit: 设定是否启动自动交易模式,预设值为 true。 charSet: 设定使用的字元集,目前只有 interbase 支持。 metaTablesSQL: 使用SQL指令,以返回一份可用的数据表清单。例如在 MySQL 里的 SHOW TABLES。 genID: 如果数据库有支持的话,这里会存放由GetID()所取得的最后值。 cacheSecs: 快取数据集的秒数。用于当使用者利用 CacheExecute() 或 CacheSeletLimit() 函数,又没有设定 $secs2cache 参数时的预设值。 sysDate: 利用数据库函数去取得目前的日期和时间。会使用到原生的日期时间标记格式。
ADOConnection 主要函数ADOConnection( ) 建构函数,请不要直接调用,使用 ADONewConnection() 来代替。 Connect($host,[$user],[$password],[$database]) 对服务器或数据来源 $host 非持续性连接,使用者认证代码为 $user ,密码为 $password ,如果服务器支持多数据库,则指定连接到数据库$database。 连接成功返回 true , 失败则返回 false 。 注意:如果你使用的是 Microsoft ADO,而非 OLEDB,你可以设定 $database 参数为你正在使用的 OLEDB 数据供应器。 PostgreSQL:另一种选择性的连接方法是将标准的PostgreSQL连接字串放在 $host 参数里,那么其它的参数都会被呼略。 对于 Oracle 及 Oci8,有两个方法可以连接。第一,使用你定义的区域 tnsnames.ora 里的 TNS 名称,将这个名称放在 $database 参数里,然后将 $host 设为 false。另一种方法,设定 $host 为服务器,而 $database 则设成数据库SID ,这将会不透过 tnsnames.ora 连接。 范例: $conn->Connect(false, ''''scott'''', ''''tiger'''', ''''name_in_tnsnames''''); # 使用 tnsnames.ora
$conn->Connect(''''server:1521'''', ''''scott'''', ''''tiger'''', ''''OracleSID''''); # 不使用 tnsnames.ora还有许多的数据库连接范例在网站 php.weblogs.com/ADOdb 以及在本版所附的 testdatabase.inc.php 文件里。 PConnect($host,[$user],[$password],[$database]) 对服务器或数据来源 $host 持续性连接,使用者认证代码为 $user ,密码为 $password ,如果服务器支持多数据库,则指定连接到数据库$database。 连接成功返回 true , 失败则返回 false 。其它数据请参考 Connect()。 Execute($sql,$inputarr=false) 执行 SQL 指令 $sql ,如果成功,就返回一个对应的 ADORecordSet 物件。要注意的是这个指令如果执行成功时,一定会返回一个数据集,即使是执行 insert 或 update 指令也一样。 返回对应的 ADORecordSet 物件。例如,如果连接的是 mysql ,那么 ADORecordSet_mysql 将会被返回。当SQL指令执行失败时会返回 false 值。 $inputarr 参数则用来做为传入的结合变量。以下是 Oracle 的范例: $conn->Execute("SELECT * FROM TABLE WHERE COND=:val", array(''''val''''=> $val));
另一个例子,使用 ODBC ,以 ''''?'''' 符号做为协定。 $conn->Execute("SELECT * FROM TABLE WHERE COND=?", array($val));结合变量(Binding variables) 变量的结合可以加速SQL指令编译及快取的速度,产生较佳的效能。目前只有 Oracle 及 ODBC 支持变量结合。 ODBC 类的 ? 结合在不支持的数据库里,是以模拟的方式来做到的。 变量结合在 odbc 及 oci8po 驱动程序里的用法。 $rs = $db->Execute(''''select * from table where val=?'''', array(''''10''''));变量结合在 oci8 驱动程序里的用法。 $rs = $db->Execute(''''select name from table where val=:key'''',array(''''key'''' => 10));CacheExecute($secs2cache,$sql,$inputarr=false) 类似于 Execute 函数,除了将数据集暂存在 $ADODB_CACHE_DIR 指定的目录里 $secs2cache 秒外。如果 CacheExecute() 被相同的参数、数据库、使用者ID及密码,而且快取也没有过期,那么快取中的数据集将会被传回。 include(''''ADOdb.inc.php'''');
include(''''tohtml.inc.php'''');
$ADODB_CACHE_DIR = ''''/usr/local/ADOdbcache'''';
$conn = &ADONewConnection(''''mysql'''');
$conn->PConnect(''''localhost'''',''''userid'''',''''password'''',''''database'''');
$rs = $conn->CacheExecute(15, ''''select * from table''''); # 快取15秒
rs2html($rs); /* recordset to html table */ 另外,从ADODB 1.80 版起,$secs2cache 参数成为选择性(也就是可以不加) $conn->Connect(...);
$conn->cacheSecs = 3600*24; // cache 24 hours
$rs = $conn->CacheExecute(''''select * from table'''');如果 CacheExecute() 被多次调用,而且数据集也持续在快取中,$secs2cache 参数不会延长被快取的数据集保留时间(因为会被呼略掉),CacheExecute()只能使用在 SELECT 指令上。 效能备注:我曾经作了一些效能测试,并且发现这些快取的效益极为显着。尤其是在数据库服务器运作效率慢于WEB服务器或数据库的负荷非常重的时候。ADODB的快取好在它减少了数据库服务器的负荷。当然,如果你的数据库服务器负荷不大,而且运作速度也比WEB服务器快,那快取反而会降低效能。 SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false) 执行成功会返回一个数据集。完成一个SELECT指令,类似于 PostgreSQL中 SELECT 指令里的LIMIT $numrows OFFSET $offset 宣告。 在 PostgreSQL,SELECT * FROM TABLE LIMIT 3 将会只传回从头开始的三笔记录。相同的,$connection->SelectLimit(''''SELECT * FROM TABLE'''',3)也有同样的意思。 而 SELECT * FROM TABLE LIMIT 3 OFFSET 2 将会返回记录 3,4及5三笔(也就是在记录2之后,返回三笔记录)。相同的,在ADODB里是以 $connection->SelectLimit(''''SELECT * FROM TABLE'''',3,2) 来做的。 要注意,LIMIT宣告,在MySQL里是相反位置的。你可以设定 $connection->SelectLimit(''''select * from table'''',-1,10) 去取得从第11笔起到最后一笔的记录。 最后一个参数 $inputarr 是针对支持变量 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 |