当一个SQL指令成功的被 ADOConnection->Execute($sql)执行后,一个 ADORecordSet 物件会被返回回来。这个物件提供了一个虚拟的指标,所以我们可以移动它,从一笔到一笔。也提供一些函数,以取得字段信息和字段类别,并有协助函数去格式化结果,以展示给使用者看。ADORecordSet 属性fields: 包含了目前记录的阵列。不是关连式阵列,但它的索引值是从 0 到 字段数 - 1。请参考函数 Fields ,这个函数的动作就像是一个关连式阵列。 dataProvider: 连接数据库的底层机制,正常设定为 native ,除非是使用 odbc 或 ado 。 blobSize: 一个 char , string 或者 varchar object 在被转成 Blob 前的最大长度(Blob 在显示时应该使用 textarea)。其它请参考 MetaType 函数。 sql: 保存了建立本数据集所使用的 sql 指令。 canSeek: 如果 Move() 函数有作用,会被设成 true 。 EOF: 当指标被移动到最后一笔时,这个值会被设定成 true 。 ADORecordSet 函数ADORecordSet( ) 建构函数。一般来说你不需要自己调用这个函数。 GetAssoc([$force_array]) 如果字段数大于 2 ,那么从数据集中产生一个关连式阵列。这个阵列是从目前的指标起一直到档尾(EOF)。这个数据集的第一个字段会成为阵列的索引。如果字段数刚好是2,当这阵列被每一个键值所建立时,那么索引会直接对应到值,除非 $force_array 被设成 true 。 范例: 以下是我们数据集的数据: 列1: Apple, Fruit, Edible 列2: Cactus, Plant, Inedible 列3: Rose, Flower, Edible GetAssociation 将会产生一个如下的关联式阵列: Apple => [Fruit, Edible] Cactus => [Plant, Inedible] Rose => [Flower,Edible] 返回值: 关连式阵列,错误则传回 false 。 GetArray([$number_of_rows]) 从目前指标位置产生一个阵列,索引值从 0 到 $number_of_rows - 1 。如果 $number_of_rows 没有被定义,那会到档尾(EOF)。 GetRows([$number_of_rows]) 是 GetArray() 的同义函数,是为了与 Microsoft ADO 相容才有的。 GetMenu($name, [$default_str=''''''''], [$blank1stItem=true], [$multiple_select=false], [$size=0], [$moreAttr='''''''']) 建立一个 HTML 选单 (<select><option><option></select>) 。数据集的第一栏 (fields[0]) 将会作为 <option> 里的显示字串。如果数据集有超过一个以上的字段,第二栏 (fields[1]) 将设定成返回给WEB服务器的值(即 value)。选单将被给予 $name 为名称。 如果 $default_str 被定义了,那么如果 $default_str == fields[0] , 那么这个字段将会被选取。 如果 $blank1stItem 为 true ,那第一个选项将会是空值。$Default_str 在对于可多选清单盒时,可以是一个阵列。 要产生一个选单区,设定 $size 为一个非 0 值(或者传入 $default_str 为一个阵列)。如果 $multiple_select 为 true ,那么一个选单区将会被产生成有 $size 个项目可见的选单(如果 $size == 0 那预设为 5 个),而且ADODB将会返回一个阵列给服务器。最后,你可以使用 $moreAttr 去增加其它的属性,像是 javascript 或样式表。 选单范例 1: GetMenu(''''menu1'''',''''A'''',true) 将会产生一个像这样的选单 : A B C 这里的数据 (A,1), (B,2), (C,3). 请参考 范例 5 。 选单范例 2: 相同的数据, GetMenu(''''menu1'''',array(''''A'''',''''B''''),false) 将会产生一个 A 及 B 被选取的选单 : A B C GetMenu2($name, [$default_str=''''''''], [$blank1stItem=true], [$multiple_select=false], [$size=0], [$moreAttr='''''''']) 近似于 GetMenu ,除了 $default_str 将会和 fields[1] 做比对,也就是选项值。 选单范例 3: 给予在范例 2 里的数据 , GetMenu2(''''menu1'''',array(''''1'''',''''2''''),false) 将会产生一个选单,A及B将会被选取。然而,这一次的被选取的比对基准是第二个字段,也就是存放要被返回给服务器里的值。 UserDate($str, [$fmt]) 转换日期字串 $str 为另一个格式,UserDate 调用 UnixDate 来解译 $str ,而 $fmt 预设值是 Y-m-d 。 UserTimeStamp($str, [$fmt]) 转换时间字串 $str 为另一个格式,时间字串格式是 Y-m-d H:i:s , 像是 "2002-02-28 23:00:12"。UserTimeStamp 调用 UnixTimeStamp 来解译 $str ,而 $fmt 预设值为 Y-m-d H:i:s 。 UnixDate($str) 将日期字串 $str 解译,并且转换成 unix mktime 格式(从 1970.01.01 00:00:00 起到现在的秒数)后传回。预设日期是以 Y-m-d H:i:s 格式来传入的。而对于 Sybase 及 Microsoft SQL Server 而言 M d Y 也是可以接受的(三个字元的月份表示法是被一个全域阵列所控制的,这个部份可能需要在地化 )。 自 1.91 版起,这个函数存在于 ADORecordSet 及 ADOConnection两个地方。 UnixTimeStamp($str) 将时间字串 $str 解译,并且转换成 unix mktime 格式(从 1970.01.01 00:00:00 起到现在的秒数)后传回。预设日期是以 Y-m-d H:i:s 格式来传入的。而对于 Sybase 及 Microsoft SQL Server 而言 M d Y 也是可以接受的(三个字元的月份表示法是被一个全域阵列所控制的,这个部份可能需要在地化 )。 自 1.91 版起,这个函数存在于 ADORecordSet 及 ADOConnection两个地方。 MoveNext( ) 移动内部指标到下一笔,fields 阵列将会自动的更新。如果不能移动,会返回 false 值,其它情况则会返回 true 。 范例 : $rs = $db->Execute($sql);
if ($rs)
while (!$rs->EOF) {
ProcessArray($rs->fields);
$rs->MoveNext();
} Move($to) 移动内部指标到指定的列 ($to) 。 列数是零基的,例如,0是第一列。fields 阵列将会自动更新。对于不支持内部卷动的数据库,ADODB将会自动模拟卷动。部份数据库不支持向后卷动。对大多数的数据库言,如果 $to 的位置在 EOF 之后,$to 将会被移动到数据集的最后一笔。有些无名的数据库使用 odbc 时,可能会没有动作。 注意:这个函数使用了绝对定址,不像 Microsoft 的 ADO。 返回值是 true 或是 false。如果是 false ,这个内部指标在大多数的实际运作上并没有移动,所以 AbsolutePosition() 将会返回指标在执行 Move() 之前最后的位置 MoveFirst() 实际上是调用 Move(0) 。注意,有一些数据库并不支持这个函数。 MoveLast() 实际上是调用 Move(RecordCount() - 1)。注意,有一些数据库并不支持这个函数。 GetRowAssoc($toUpper=true) 这个函数并不能持续的以理想的方式维持关连阵列的内容(每换一笔记录,就要重新执行一次)。使用 $ADODB_FETCH_MODE 共用变量来替代它。 返回一个包含了目前记录的关连式阵列,阵列的索引值就是字段名。字段名全都是大写的,以便存取。要取得下一笔记录,你要调用 MoveNext() 。 范例 : Array ( [ID] => 1 [FIRSTNAME] => Caroline [LASTNAME] => Miranda [CREATED] => 2001-07-05 ) 注意:不要同时使用 GetRowAssoc() 和 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC 。因为他们有相同的功能,会彼此交互干扰。 AbsolutePage($page=-1) 返回目前的页码,需要先调用 PageExecute() / CachePageExecute() 。参考 Example 8 。 AtFirstPage($status='''''''') 如果在第一页,返回 true (1基式),需要先调用 PageExecute() / CachePageExecute() 。参考 Example 8 。 AtLastPage($status='''''''') 如果在最后一页,返回 true (1基式),需要先调用 PageExecute() / CachePageExecute() 。参考 Example 8 。 Fields($colname) 不鼓励使用,请改以 $ADODB_FETCH_MODE 取代。 当使用原生函数库时,有些数据库函数返回具名及索引双阵列(如 MySQL)。GetRowAssoc() 并不返回结合了具名及索引的阵列元素。 本函数返回由 $colname 所指栏名,在目前记录里的的字段值。 字段名区分大小写。 FetchRow() 返回目前记录内容的阵列,如果是档尾(EOF),返回 false 。注意:不要把 FetchRow 和 MoveNext() 混用。 用法 : $rs = $db->Execute($sql);
if ($rs)
while ($arr = $rs->FetchRow()) {
# process $arr
}FetchInto(&$array) 设定 $array 到目前的记录里。如果在档尾(EOF),返回 PEAR_Error 物件。如果成功,返回 1 (DB_OK 常数)。 如果 PEAR 未定义,当 EOF 时返回 false 。FetchRow() 很容易使用,请参考之前的例子。 FetchField($column_number) 返回一个物件,包含了所指字段的名称,类别及最大长度。如果最大长度不能被明确决定,将会返回 -1 。 行号是以 0 基为计算起点的,请参考 范例 2 。 FieldCount( ) 返回数据集里字段数。 RecordCount( ) 返回数据集里的记录笔数。如果无法从数据库驱动程序API里取得正确的数字,ADODB将会把所有的记录内容,存放在内存里,等全部取完后,再返回记录总笔数。这个内存可以藉由设定全域变量 $ADODB_COUNTERECS = false 而被取消(基于执行效能的理由)。当取消后,对某些数据库,RecordCount() 将会返回 -1 。相关支持状况,请参考前面的数据库支持表有详细的说明。 RowCount 和 RecordCount 是同义函数。 PO_RecordCount($table, $where) 返回在数据集里的记录笔数。如果数据库不支持,那么将返回对 $table 数据表下达以 $where 为条件的 SELECT COUNT(*) 指令后返回的值。 $numrows = $rs->PO_RecordCount("articles_table", "group=$group"); 会返回数据库执行 SELECT COUNT(*) FROM articles_table WHERE group=$group 的结果。 FetchObject($toupper=true) 返回目前的记录为一个物件。如果 $toupper 为 true ,那么物件字段名将会设为大写。注意:较新的 FetchNextObject() 是取得 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 |