You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							629 lines
						
					
					
						
							16 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							629 lines
						
					
					
						
							16 KiB
						
					
					
				| <?php | |
| /*  | |
| V4.55 3 Jan 2005  (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved. | |
|   Released under both BSD license and Lesser GPL library license.  | |
|   Whenever there is any discrepancy between the two licenses,  | |
|   the BSD license will take precedence.  | |
| Set tabs to 4 for best viewing. | |
|    | |
|   Latest version is available at http://adodb.sourceforge.net | |
|    | |
| 	Microsoft ADO data driver. Requires ADO. Works only on MS Windows. | |
| */ | |
| 
 | |
| // security - hide paths | |
| if (!defined('ADODB_DIR')) die(); | |
| 	 | |
| define("_ADODB_ADO_LAYER", 1 ); | |
| /*-------------------------------------------------------------------------------------- | |
| --------------------------------------------------------------------------------------*/ | |
| 
 | |
| 	 | |
| class ADODB_ado extends ADOConnection { | |
| 	var $databaseType = "ado";	 | |
| 	var $_bindInputArray = false; | |
| 	var $fmtDate = "'Y-m-d'"; | |
| 	var $fmtTimeStamp = "'Y-m-d, h:i:sA'"; | |
| 	var $replaceQuote = "''"; // string to use to replace quotes | |
| 	var $dataProvider = "ado";	 | |
| 	var $hasAffectedRows = true; | |
| 	var $adoParameterType = 201; // 201 = long varchar, 203=long wide varchar, 205 = long varbinary | |
| 	var $_affectedRows = false; | |
| 	var $_thisTransactions; | |
| 	var $_cursor_type = 3; // 3=adOpenStatic,0=adOpenForwardOnly,1=adOpenKeyset,2=adOpenDynamic | |
| 	var $_cursor_location = 3; // 2=adUseServer, 3 = adUseClient; | |
| 	var $_lock_type = -1; | |
| 	var $_execute_option = -1; | |
| 	var $poorAffectedRows = true;  | |
| 	var $charPage; | |
| 		 | |
| 	function ADODB_ado()  | |
| 	{ 	 | |
| 		$this->_affectedRows = new VARIANT; | |
| 	} | |
| 
 | |
| 	function ServerInfo() | |
| 	{ | |
| 		if (!empty($this->_connectionID)) $desc = $this->_connectionID->provider; | |
| 		return array('description' => $desc, 'version' => ''); | |
| 	} | |
| 	 | |
| 	function _affectedrows() | |
| 	{ | |
| 		if (PHP_VERSION >= 5) return $this->_affectedRows; | |
| 		 | |
| 		return $this->_affectedRows->value; | |
| 	} | |
| 	 | |
| 	// you can also pass a connection string like this: | |
| 	// | |
| 	// $DB->Connect('USER ID=sa;PASSWORD=pwd;SERVER=mangrove;DATABASE=ai',false,false,'SQLOLEDB'); | |
| 	function _connect($argHostname, $argUsername, $argPassword, $argProvider= 'MSDASQL') | |
| 	{ | |
| 		$u = 'UID'; | |
| 		$p = 'PWD'; | |
| 	 | |
| 		if (!empty($this->charPage)) | |
| 			$dbc = new COM('ADODB.Connection',null,$this->charPage); | |
| 		else | |
| 			$dbc = new COM('ADODB.Connection'); | |
| 			 | |
| 		if (! $dbc) return false; | |
| 
 | |
| 		/* special support if provider is mssql or access */ | |
| 		if ($argProvider=='mssql') { | |
| 			$u = 'User Id';  //User parameter name for OLEDB | |
| 			$p = 'Password';  | |
| 			$argProvider = "SQLOLEDB"; // SQL Server Provider | |
| 			 | |
| 			// not yet | |
| 			//if ($argDatabasename) $argHostname .= ";Initial Catalog=$argDatabasename"; | |
| 			 | |
| 			//use trusted conection for SQL if username not specified | |
| 			if (!$argUsername) $argHostname .= ";Trusted_Connection=Yes"; | |
| 		} else if ($argProvider=='access') | |
| 			$argProvider = "Microsoft.Jet.OLEDB.4.0"; // Microsoft Jet Provider | |
| 		 | |
| 		if ($argProvider) $dbc->Provider = $argProvider;	 | |
| 		 | |
| 		if ($argUsername) $argHostname .= ";$u=$argUsername"; | |
| 		if ($argPassword)$argHostname .= ";$p=$argPassword"; | |
| 		 | |
| 		if ($this->debug) ADOConnection::outp( "Host=".$argHostname."<BR>\n version=$dbc->version"); | |
| 		// @ added below for php 4.0.1 and earlier | |
| 		@$dbc->Open((string) $argHostname); | |
| 		 | |
| 		$this->_connectionID = $dbc; | |
| 		 | |
| 		$dbc->CursorLocation = $this->_cursor_location; | |
| 		return  $dbc->State > 0; | |
| 	} | |
| 	 | |
| 	// returns true or false | |
| 	function _pconnect($argHostname, $argUsername, $argPassword, $argProvider='MSDASQL') | |
| 	{ | |
| 		return $this->_connect($argHostname,$argUsername,$argPassword,$argProvider); | |
| 	}	 | |
| 	 | |
| /* | |
| 	adSchemaCatalogs	= 1, | |
| 	adSchemaCharacterSets	= 2, | |
| 	adSchemaCollations	= 3, | |
| 	adSchemaColumns	= 4, | |
| 	adSchemaCheckConstraints	= 5, | |
| 	adSchemaConstraintColumnUsage	= 6, | |
| 	adSchemaConstraintTableUsage	= 7, | |
| 	adSchemaKeyColumnUsage	= 8, | |
| 	adSchemaReferentialContraints	= 9, | |
| 	adSchemaTableConstraints	= 10, | |
| 	adSchemaColumnsDomainUsage	= 11, | |
| 	adSchemaIndexes	= 12, | |
| 	adSchemaColumnPrivileges	= 13, | |
| 	adSchemaTablePrivileges	= 14, | |
| 	adSchemaUsagePrivileges	= 15, | |
| 	adSchemaProcedures	= 16, | |
| 	adSchemaSchemata	= 17, | |
| 	adSchemaSQLLanguages	= 18, | |
| 	adSchemaStatistics	= 19, | |
| 	adSchemaTables	= 20, | |
| 	adSchemaTranslations	= 21, | |
| 	adSchemaProviderTypes	= 22, | |
| 	adSchemaViews	= 23, | |
| 	adSchemaViewColumnUsage	= 24, | |
| 	adSchemaViewTableUsage	= 25, | |
| 	adSchemaProcedureParameters	= 26, | |
| 	adSchemaForeignKeys	= 27, | |
| 	adSchemaPrimaryKeys	= 28, | |
| 	adSchemaProcedureColumns	= 29, | |
| 	adSchemaDBInfoKeywords	= 30, | |
| 	adSchemaDBInfoLiterals	= 31, | |
| 	adSchemaCubes	= 32, | |
| 	adSchemaDimensions	= 33, | |
| 	adSchemaHierarchies	= 34, | |
| 	adSchemaLevels	= 35, | |
| 	adSchemaMeasures	= 36, | |
| 	adSchemaProperties	= 37, | |
| 	adSchemaMembers	= 38 | |
|  | |
| */ | |
| 	 | |
| 	function &MetaTables() | |
| 	{ | |
| 		$arr= array(); | |
| 		$dbc = $this->_connectionID; | |
| 		 | |
| 		$adors=@$dbc->OpenSchema(20);//tables | |
| 		if ($adors){ | |
| 			$f = $adors->Fields(2);//table/view name | |
| 			$t = $adors->Fields(3);//table type | |
| 			while (!$adors->EOF){ | |
| 				$tt=substr($t->value,0,6); | |
| 				if ($tt!='SYSTEM' && $tt !='ACCESS') | |
| 					$arr[]=$f->value; | |
| 				//print $f->value . ' ' . $t->value.'<br>'; | |
| 				$adors->MoveNext(); | |
| 			} | |
| 			$adors->Close(); | |
| 		} | |
| 		 | |
| 		return $arr; | |
| 	} | |
| 	 | |
| 	function &MetaColumns($table) | |
| 	{ | |
| 		$table = strtoupper($table); | |
| 		$arr = array(); | |
| 		$dbc = $this->_connectionID; | |
| 		 | |
| 		$adors=@$dbc->OpenSchema(4);//tables | |
| 	 | |
| 		if ($adors){ | |
| 			$t = $adors->Fields(2);//table/view name | |
| 			while (!$adors->EOF){ | |
| 				 | |
| 				 | |
| 				if (strtoupper($t->Value) == $table) { | |
| 				 | |
| 					$fld = new ADOFieldObject(); | |
| 					$c = $adors->Fields(3); | |
| 					$fld->name = $c->Value; | |
| 					$fld->type = 'CHAR'; // cannot discover type in ADO! | |
| 					$fld->max_length = -1; | |
| 					$arr[strtoupper($fld->name)]=$fld; | |
| 				} | |
| 		 | |
| 				$adors->MoveNext(); | |
| 			} | |
| 			$adors->Close(); | |
| 		} | |
| 		$false = false; | |
| 		return empty($arr) ? $false : $arr; | |
| 	} | |
| 	 | |
| 
 | |
| 
 | |
| 	 | |
| 	/* returns queryID or false */ | |
| 	function &_query($sql,$inputarr=false)  | |
| 	{ | |
| 		 | |
| 		$dbc = $this->_connectionID; | |
| 		$false = false; | |
| 		 | |
| 	//	return rs	 | |
| 		if ($inputarr) { | |
| 			 | |
| 			if (!empty($this->charPage)) | |
| 				$oCmd = new COM('ADODB.Command',null,$this->charPage); | |
| 			else | |
| 				$oCmd = new COM('ADODB.Command'); | |
| 			$oCmd->ActiveConnection = $dbc; | |
| 			$oCmd->CommandText = $sql; | |
| 			$oCmd->CommandType = 1; | |
| 
 | |
| 			foreach($inputarr as $val) { | |
| 				// name, type, direction 1 = input, len, | |
| 				$this->adoParameterType = 130; | |
| 				$p = $oCmd->CreateParameter('name',$this->adoParameterType,1,strlen($val),$val); | |
| 				//print $p->Type.' '.$p->value; | |
| 				$oCmd->Parameters->Append($p); | |
| 			} | |
| 			$p = false; | |
| 			$rs = $oCmd->Execute(); | |
| 			$e = $dbc->Errors; | |
| 			if ($dbc->Errors->Count > 0) return $false; | |
| 			return $rs; | |
| 		} | |
| 		 | |
| 		$rs = @$dbc->Execute($sql,$this->_affectedRows, $this->_execute_option); | |
| 
 | |
| 		if ($dbc->Errors->Count > 0) return $false; | |
| 		if (! $rs) return $false; | |
| 		 | |
| 		if ($rs->State == 0) { | |
| 			$true = true; | |
| 			return $true; // 0 = adStateClosed means no records returned | |
| 		} | |
| 		return $rs; | |
| 	} | |
| 
 | |
| 	 | |
| 	function BeginTrans()  | |
| 	{  | |
| 		if ($this->transOff) return true; | |
| 		 | |
| 		if (isset($this->_thisTransactions)) | |
| 			if (!$this->_thisTransactions) return false; | |
| 		else { | |
| 			$o = $this->_connectionID->Properties("Transaction DDL"); | |
| 			$this->_thisTransactions = $o ? true : false; | |
| 			if (!$o) return false; | |
| 		} | |
| 		@$this->_connectionID->BeginTrans(); | |
| 		$this->transCnt += 1; | |
| 		return true; | |
| 	} | |
| 	function CommitTrans($ok=true)  | |
| 	{  | |
| 		if (!$ok) return $this->RollbackTrans(); | |
| 		if ($this->transOff) return true; | |
| 		 | |
| 		@$this->_connectionID->CommitTrans(); | |
| 		if ($this->transCnt) @$this->transCnt -= 1; | |
| 		return true; | |
| 	} | |
| 	function RollbackTrans() { | |
| 		if ($this->transOff) return true; | |
| 		@$this->_connectionID->RollbackTrans(); | |
| 		if ($this->transCnt) @$this->transCnt -= 1; | |
| 		return true; | |
| 	} | |
| 	 | |
| 	/*	Returns: the last error message from previous database operation	*/	 | |
| 
 | |
| 	function ErrorMsg()  | |
| 	{ | |
| 		$errc = $this->_connectionID->Errors; | |
| 		if ($errc->Count == 0) return ''; | |
| 		$err = $errc->Item($errc->Count-1); | |
| 		return $err->Description; | |
| 	} | |
| 	 | |
| 	function ErrorNo()  | |
| 	{ | |
| 		$errc = $this->_connectionID->Errors; | |
| 		if ($errc->Count == 0) return 0; | |
| 		$err = $errc->Item($errc->Count-1); | |
| 		return $err->NativeError; | |
| 	} | |
| 
 | |
| 	// returns true or false | |
| 	function _close() | |
| 	{ | |
| 		if ($this->_connectionID) $this->_connectionID->Close(); | |
| 		$this->_connectionID = false; | |
| 		return true; | |
| 	} | |
| 	 | |
| 	 | |
| } | |
| 	 | |
| /*-------------------------------------------------------------------------------------- | |
| 	 Class Name: Recordset | |
| --------------------------------------------------------------------------------------*/ | |
| 
 | |
| class ADORecordSet_ado extends ADORecordSet {	 | |
| 	 | |
| 	var $bind = false; | |
| 	var $databaseType = "ado";	 | |
| 	var $dataProvider = "ado";	 | |
| 	var $_tarr = false; // caches the types | |
| 	var $_flds; // and field objects | |
| 	var $canSeek = true; | |
|   	var $hideErrors = true; | |
| 		   | |
| 	function ADORecordSet_ado($id,$mode=false) | |
| 	{ | |
| 		if ($mode === false) {  | |
| 			global $ADODB_FETCH_MODE; | |
| 			$mode = $ADODB_FETCH_MODE; | |
| 		} | |
| 		$this->fetchMode = $mode; | |
| 		return $this->ADORecordSet($id,$mode); | |
| 	} | |
| 
 | |
| 
 | |
| 	// returns the field object | |
| 	function FetchField($fieldOffset = -1) { | |
| 		$off=$fieldOffset+1; // offsets begin at 1 | |
| 		 | |
| 		$o= new ADOFieldObject(); | |
| 		$rs = $this->_queryID; | |
| 		$f = $rs->Fields($fieldOffset); | |
| 		$o->name = $f->Name; | |
| 		$t = $f->Type; | |
| 		$o->type = $this->MetaType($t); | |
| 		$o->max_length = $f->DefinedSize; | |
| 		$o->ado_type = $t; | |
| 		 | |
| 
 | |
| 		//print "off=$off name=$o->name type=$o->type len=$o->max_length<br>"; | |
| 		return $o; | |
| 	} | |
| 	 | |
| 	/* Use associative array to get fields array */ | |
| 	function Fields($colname) | |
| 	{ | |
| 		if ($this->fetchMode & ADODB_FETCH_ASSOC) return $this->fields[$colname]; | |
| 		if (!$this->bind) { | |
| 			$this->bind = array(); | |
| 			for ($i=0; $i < $this->_numOfFields; $i++) { | |
| 				$o = $this->FetchField($i); | |
| 				$this->bind[strtoupper($o->name)] = $i; | |
| 			} | |
| 		} | |
| 		 | |
| 		 return $this->fields[$this->bind[strtoupper($colname)]]; | |
| 	} | |
| 
 | |
| 		 | |
| 	function _initrs() | |
| 	{ | |
| 		$rs = $this->_queryID; | |
| 		$this->_numOfRows = $rs->RecordCount; | |
| 		 | |
| 		$f = $rs->Fields; | |
| 		$this->_numOfFields = $f->Count; | |
| 	} | |
| 	 | |
| 	 | |
| 	 // should only be used to move forward as we normally use forward-only cursors | |
| 	function _seek($row) | |
| 	{ | |
| 	   $rs = $this->_queryID;  | |
| 		// absoluteposition doesn't work -- my maths is wrong ? | |
| 		//	$rs->AbsolutePosition->$row-2; | |
| 		//	return true; | |
| 		if ($this->_currentRow > $row) return false; | |
| 		@$rs->Move((integer)$row - $this->_currentRow-1); //adBookmarkFirst | |
| 		return true; | |
| 	} | |
| 	 | |
| /* | |
| 	OLEDB types | |
| 	 | |
| 	 enum DBTYPEENUM | |
| 	{	DBTYPE_EMPTY	= 0, | |
| 	DBTYPE_NULL	= 1, | |
| 	DBTYPE_I2	= 2, | |
| 	DBTYPE_I4	= 3, | |
| 	DBTYPE_R4	= 4, | |
| 	DBTYPE_R8	= 5, | |
| 	DBTYPE_CY	= 6, | |
| 	DBTYPE_DATE	= 7, | |
| 	DBTYPE_BSTR	= 8, | |
| 	DBTYPE_IDISPATCH	= 9, | |
| 	DBTYPE_ERROR	= 10, | |
| 	DBTYPE_BOOL	= 11, | |
| 	DBTYPE_VARIANT	= 12, | |
| 	DBTYPE_IUNKNOWN	= 13, | |
| 	DBTYPE_DECIMAL	= 14, | |
| 	DBTYPE_UI1	= 17, | |
| 	DBTYPE_ARRAY	= 0x2000, | |
| 	DBTYPE_BYREF	= 0x4000, | |
| 	DBTYPE_I1	= 16, | |
| 	DBTYPE_UI2	= 18, | |
| 	DBTYPE_UI4	= 19, | |
| 	DBTYPE_I8	= 20, | |
| 	DBTYPE_UI8	= 21, | |
| 	DBTYPE_GUID	= 72, | |
| 	DBTYPE_VECTOR	= 0x1000, | |
| 	DBTYPE_RESERVED	= 0x8000, | |
| 	DBTYPE_BYTES	= 128, | |
| 	DBTYPE_STR	= 129, | |
| 	DBTYPE_WSTR	= 130, | |
| 	DBTYPE_NUMERIC	= 131, | |
| 	DBTYPE_UDT	= 132, | |
| 	DBTYPE_DBDATE	= 133, | |
| 	DBTYPE_DBTIME	= 134, | |
| 	DBTYPE_DBTIMESTAMP	= 135 | |
| 	 | |
| 	ADO Types | |
| 	 | |
|    	adEmpty	= 0, | |
| 	adTinyInt	= 16, | |
| 	adSmallInt	= 2, | |
| 	adInteger	= 3, | |
| 	adBigInt	= 20, | |
| 	adUnsignedTinyInt	= 17, | |
| 	adUnsignedSmallInt	= 18, | |
| 	adUnsignedInt	= 19, | |
| 	adUnsignedBigInt	= 21, | |
| 	adSingle	= 4, | |
| 	adDouble	= 5, | |
| 	adCurrency	= 6, | |
| 	adDecimal	= 14, | |
| 	adNumeric	= 131, | |
| 	adBoolean	= 11, | |
| 	adError	= 10, | |
| 	adUserDefined	= 132, | |
| 	adVariant	= 12, | |
| 	adIDispatch	= 9, | |
| 	adIUnknown	= 13,	 | |
| 	adGUID	= 72, | |
| 	adDate	= 7, | |
| 	adDBDate	= 133, | |
| 	adDBTime	= 134, | |
| 	adDBTimeStamp	= 135, | |
| 	adBSTR	= 8, | |
| 	adChar	= 129, | |
| 	adVarChar	= 200, | |
| 	adLongVarChar	= 201, | |
| 	adWChar	= 130, | |
| 	adVarWChar	= 202, | |
| 	adLongVarWChar	= 203, | |
| 	adBinary	= 128, | |
| 	adVarBinary	= 204, | |
| 	adLongVarBinary	= 205, | |
| 	adChapter	= 136, | |
| 	adFileTime	= 64, | |
| 	adDBFileTime	= 137, | |
| 	adPropVariant	= 138, | |
| 	adVarNumeric	= 139 | |
| */ | |
| 	function MetaType($t,$len=-1,$fieldobj=false) | |
| 	{ | |
| 		if (is_object($t)) { | |
| 			$fieldobj = $t; | |
| 			$t = $fieldobj->type; | |
| 			$len = $fieldobj->max_length; | |
| 		} | |
| 		 | |
| 		if (!is_numeric($t)) return $t; | |
| 		 | |
| 		switch ($t) { | |
| 		case 0: | |
| 		case 12: // variant | |
| 		case 8: // bstr | |
| 		case 129: //char | |
| 		case 130: //wc | |
| 		case 200: // varc | |
| 		case 202:// varWC | |
| 		case 128: // bin | |
| 		case 204: // varBin | |
| 		case 72: // guid | |
| 			if ($len <= $this->blobSize) return 'C'; | |
| 		 | |
| 		case 201: | |
| 		case 203: | |
| 			return 'X'; | |
| 		case 128: | |
| 		case 204: | |
| 		case 205: | |
| 			 return 'B'; | |
| 		case 7: | |
| 		case 133: return 'D'; | |
| 		 | |
| 		case 134: | |
| 		case 135: return 'T'; | |
| 		 | |
| 		case 11: return 'L'; | |
| 		 | |
| 		case 16://	adTinyInt	= 16, | |
| 		case 2://adSmallInt	= 2, | |
| 		case 3://adInteger	= 3, | |
| 		case 4://adBigInt	= 20, | |
| 		case 17://adUnsignedTinyInt	= 17, | |
| 		case 18://adUnsignedSmallInt	= 18, | |
| 		case 19://adUnsignedInt	= 19, | |
| 		case 20://adUnsignedBigInt	= 21, | |
| 			return 'I'; | |
| 		default: return 'N'; | |
| 		} | |
| 	} | |
| 	 | |
| 	// time stamp not supported yet | |
| 	function _fetch() | |
| 	{	 | |
| 		$rs = $this->_queryID; | |
| 		if (!$rs or $rs->EOF) { | |
| 			$this->fields = false; | |
| 			return false; | |
| 		} | |
| 		$this->fields = array(); | |
| 	 | |
| 		if (!$this->_tarr) { | |
| 			$tarr = array(); | |
| 			$flds = array(); | |
| 			for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { | |
| 				$f = $rs->Fields($i); | |
| 				$flds[] = $f; | |
| 				$tarr[] = $f->Type; | |
| 			} | |
| 			// bind types and flds only once | |
| 			$this->_tarr = $tarr;  | |
| 			$this->_flds = $flds; | |
| 		} | |
| 		$t = reset($this->_tarr); | |
| 		$f = reset($this->_flds); | |
| 		 | |
| 		if ($this->hideErrors)  $olde = error_reporting(E_ERROR|E_CORE_ERROR);// sometimes $f->value be null | |
| 		for ($i=0,$max = $this->_numOfFields; $i < $max; $i++) { | |
| 			//echo "<p>",$t,' ';var_dump($f->value); echo '</p>'; | |
| 			switch($t) { | |
| 			case 135: // timestamp | |
| 				if (!strlen((string)$f->value)) $this->fields[] = false; | |
| 				else { | |
| 					if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); | |
| 					else $val = $f->value; | |
| 					$this->fields[] = adodb_date('Y-m-d H:i:s',$val); | |
| 				} | |
| 				break;			 | |
| 			case 133:// A date value (yyyymmdd)  | |
| 				if ($val = $f->value) { | |
| 					$this->fields[] = substr($val,0,4).'-'.substr($val,4,2).'-'.substr($val,6,2); | |
| 				} else | |
| 					$this->fields[] = false; | |
| 				break; | |
| 			case 7: // adDate | |
| 				if (!strlen((string)$f->value)) $this->fields[] = false; | |
| 				else { | |
| 					if (!is_numeric($f->value)) $val = variant_date_to_timestamp($f->value); | |
| 					else $val = $f->value; | |
| 					 | |
| 					if (($val % 86400) == 0) $this->fields[] = adodb_date('Y-m-d',$val); | |
| 					else $this->fields[] = adodb_date('Y-m-d H:i:s',$val); | |
| 				} | |
| 				break; | |
| 			case 1: // null | |
| 				$this->fields[] = false; | |
| 				break; | |
| 			case 6: // currency is not supported properly; | |
| 				ADOConnection::outp( '<b>'.$f->Name.': currency type not supported by PHP</b>'); | |
| 				$this->fields[] = (float) $f->value; | |
| 				break; | |
| 			default: | |
| 				$this->fields[] = $f->value;  | |
| 				break; | |
| 			} | |
| 			//print " $f->value $t, "; | |
| 			$f = next($this->_flds); | |
| 			$t = next($this->_tarr); | |
| 		} // for | |
| 		if ($this->hideErrors) error_reporting($olde); | |
| 		@$rs->MoveNext(); // @ needed for some versions of PHP! | |
| 		 | |
| 		if ($this->fetchMode & ADODB_FETCH_ASSOC) { | |
| 			$this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE); | |
| 		} | |
| 		return true; | |
| 	} | |
| 	 | |
| 		function NextRecordSet() | |
| 		{ | |
| 			$rs = $this->_queryID; | |
| 			$this->_queryID = $rs->NextRecordSet(); | |
| 			//$this->_queryID = $this->_QueryId->NextRecordSet(); | |
| 			if ($this->_queryID == null) return false; | |
| 			 | |
| 			$this->_currentRow = -1; | |
| 			$this->_currentPage = -1; | |
| 			$this->bind = false; | |
| 			$this->fields = false; | |
| 			$this->_flds = false; | |
| 			$this->_tarr = false; | |
| 			 | |
| 			$this->_inited = false; | |
| 			$this->Init(); | |
| 			return true; | |
| 		} | |
| 
 | |
| 	function _close() { | |
| 		$this->_flds = false; | |
| 		@$this->_queryID->Close();// by Pete Dishman (peterd@telephonetics.co.uk) | |
| 		$this->_queryID = false;	 | |
| 	} | |
| 
 | |
| } | |
| 
 | |
| ?>
 |