⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodb-odbc.inc.php

📁 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。 它通过snmpget来获取数据
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		}	}		function &MetaColumns($table)	{	global $ADODB_FETCH_MODE;			$false = false;		if ($this->uCaseTables) $table = strtoupper($table);		$schema = '';		$this->_findschema($table,$schema);				$savem = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;			/*if (false) { // after testing, confirmed that the following does not work becoz of a bug			$qid2 = odbc_tables($this->_connectionID);			$rs = new ADORecordSet_odbc($qid2);					$ADODB_FETCH_MODE = $savem;			if (!$rs) return false;			$rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change;			$rs->_fetch();						while (!$rs->EOF) {				if ($table == strtoupper($rs->fields[2])) {					$q = $rs->fields[0];					$o = $rs->fields[1];					break;				}				$rs->MoveNext();			}			$rs->Close();						$qid = odbc_columns($this->_connectionID,$q,$o,strtoupper($table),'%');		} */				switch ($this->databaseType) {		case 'access':		case 'vfp':			$qid = odbc_columns($this->_connectionID);#,'%','',strtoupper($table),'%');			break;						case 'db2':            $colname = "%";            $qid = odbc_columns($this->_connectionID, "", $schema, $table, $colname);            break;					default:			$qid = @odbc_columns($this->_connectionID,'%','%',strtoupper($table),'%');			if (empty($qid)) $qid = odbc_columns($this->_connectionID);			break;		}		if (empty($qid)) return $false;				$rs =& new ADORecordSet_odbc($qid);		$ADODB_FETCH_MODE = $savem;				if (!$rs) return $false;		$rs->_has_stupid_odbc_fetch_api_change = $this->_has_stupid_odbc_fetch_api_change;		$rs->_fetch();				$retarr = array();				/*		$rs->fields indices		0 TABLE_QUALIFIER		1 TABLE_SCHEM		2 TABLE_NAME		3 COLUMN_NAME		4 DATA_TYPE		5 TYPE_NAME		6 PRECISION		7 LENGTH		8 SCALE		9 RADIX		10 NULLABLE		11 REMARKS		*/		while (!$rs->EOF) {		//	adodb_pr($rs->fields);			if (strtoupper(trim($rs->fields[2])) == $table && (!$schema || strtoupper($rs->fields[1]) == $schema)) {				$fld = new ADOFieldObject();				$fld->name = $rs->fields[3];				$fld->type = $this->ODBCTypes($rs->fields[4]);								// ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp				// access uses precision to store length for char/varchar				if ($fld->type == 'C' or $fld->type == 'X') {					if ($this->databaseType == 'access') 						$fld->max_length = $rs->fields[6];					else if ($rs->fields[4] <= -95) // UNICODE						$fld->max_length = $rs->fields[7]/2;					else						$fld->max_length = $rs->fields[7];				} else 					$fld->max_length = $rs->fields[7];				$fld->not_null = !empty($rs->fields[10]);				$fld->scale = $rs->fields[8];				$retarr[strtoupper($fld->name)] = $fld;				} else if (sizeof($retarr)>0)				break;			$rs->MoveNext();		}		$rs->Close(); //-- crashes 4.03pl1 -- why?				return empty($retarr) ? $false : $retarr;	}		function Prepare($sql)	{		if (! $this->_bindInputArray) return $sql; // no binding		$stmt = odbc_prepare($this->_connectionID,$sql);		if (!$stmt) {			// we don't know whether odbc driver is parsing prepared stmts, so just return sql			return $sql;		}		return array($sql,$stmt,false);	}	/* returns queryID or false */	function _query($sql,$inputarr=false) 	{	GLOBAL $php_errormsg;		if (isset($php_errormsg)) $php_errormsg = '';		$this->_error = '';				if ($inputarr) {			if (is_array($sql)) {				$stmtid = $sql[1];			} else {				$stmtid = odbc_prepare($this->_connectionID,$sql);					if ($stmtid == false) {					$this->_errorMsg = isset($php_errormsg) ? $php_errormsg : '';					return false;				}			}						if (! odbc_execute($stmtid,$inputarr)) {				//@odbc_free_result($stmtid);				if ($this->_haserrorfunctions) {					$this->_errorMsg = odbc_errormsg();					$this->_errorCode = odbc_error();				}				return false;			}				} else if (is_array($sql)) {			$stmtid = $sql[1];			if (!odbc_execute($stmtid)) {				//@odbc_free_result($stmtid);				if ($this->_haserrorfunctions) {					$this->_errorMsg = odbc_errormsg();					$this->_errorCode = odbc_error();				}				return false;			}		} else			$stmtid = odbc_exec($this->_connectionID,$sql);				$this->_lastAffectedRows = 0;		if ($stmtid) {			if (@odbc_num_fields($stmtid) == 0) {				$this->_lastAffectedRows = odbc_num_rows($stmtid);				$stmtid = true;			} else {				$this->_lastAffectedRows = 0;				odbc_binmode($stmtid,$this->binmode);				odbc_longreadlen($stmtid,$this->maxblobsize);			}						if ($this->_haserrorfunctions) {				$this->_errorMsg = '';				$this->_errorCode = 0;			} else				$this->_errorMsg = isset($php_errormsg) ? $php_errormsg : '';		} else {			if ($this->_haserrorfunctions) {				$this->_errorMsg = odbc_errormsg();				$this->_errorCode = odbc_error();			} else				$this->_errorMsg = isset($php_errormsg) ? $php_errormsg : '';		}		return $stmtid;	}	/*		Insert a null into the blob field of the table first.		Then use UpdateBlob to store the blob.				Usage:		 		$conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');		$conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');	*/	function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')	{		return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false;	}		// returns true or false	function _close()	{		$ret = @odbc_close($this->_connectionID);		$this->_connectionID = false;		return $ret;	}	function _affectedrows()	{		return $this->_lastAffectedRows;	}	}	/*--------------------------------------------------------------------------------------	 Class Name: Recordset--------------------------------------------------------------------------------------*/class ADORecordSet_odbc extends ADORecordSet {			var $bind = false;	var $databaseType = "odbc";			var $dataProvider = "odbc";	var $useFetchArray;	var $_has_stupid_odbc_fetch_api_change;		function ADORecordSet_odbc($id,$mode=false)	{		if ($mode === false) {  			global $ADODB_FETCH_MODE;			$mode = $ADODB_FETCH_MODE;		}		$this->fetchMode = $mode;				$this->_queryID = $id;				// the following is required for mysql odbc driver in 4.3.1 -- why?		$this->EOF = false;		$this->_currentRow = -1;		//$this->ADORecordSet($id);	}	// returns the field object	function &FetchField($fieldOffset = -1) 	{				$off=$fieldOffset+1; // offsets begin at 1				$o= new ADOFieldObject();		$o->name = @odbc_field_name($this->_queryID,$off);		$o->type = @odbc_field_type($this->_queryID,$off);		$o->max_length = @odbc_field_len($this->_queryID,$off);		if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name);		else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name);		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()	{	global $ADODB_COUNTRECS;		$this->_numOfRows = ($ADODB_COUNTRECS) ? @odbc_num_rows($this->_queryID) : -1;		$this->_numOfFields = @odbc_num_fields($this->_queryID);		// some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0		if ($this->_numOfRows == 0) $this->_numOfRows = -1;		//$this->useFetchArray = $this->connection->useFetchArray;		$this->_has_stupid_odbc_fetch_api_change = ADODB_PHPVER >= 0x4200;	}			function _seek($row)	{		return false;	}		// speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated	function &GetArrayLimit($nrows,$offset=-1) 	{		if ($offset <= 0) {			$rs =& $this->GetArray($nrows);			return $rs;		}		$savem = $this->fetchMode;		$this->fetchMode = ADODB_FETCH_NUM;		$this->Move($offset);		$this->fetchMode = $savem;				if ($this->fetchMode & ADODB_FETCH_ASSOC) {			$this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE);		}				$results = array();		$cnt = 0;		while (!$this->EOF && $nrows != $cnt) {			$results[$cnt++] = $this->fields;			$this->MoveNext();		}				return $results;	}			function MoveNext() 	{		if ($this->_numOfRows != 0 && !$this->EOF) {					$this->_currentRow++;						if ($this->_has_stupid_odbc_fetch_api_change)				$rez = @odbc_fetch_into($this->_queryID,$this->fields);			else {				$row = 0;				$rez = @odbc_fetch_into($this->_queryID,$row,$this->fields);			}			if ($rez) {				if ($this->fetchMode & ADODB_FETCH_ASSOC) {					$this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE);				}				return true;			}		}		$this->fields = false;		$this->EOF = true;		return false;	}			function _fetch()	{				if ($this->_has_stupid_odbc_fetch_api_change)			$rez = @odbc_fetch_into($this->_queryID,$this->fields,$row);		else {			$row = 0;			$rez = @odbc_fetch_into($this->_queryID,$row,$this->fields);		}		if ($rez) {			if ($this->fetchMode & ADODB_FETCH_ASSOC) {				$this->fields =& $this->GetRowAssoc(ADODB_ASSOC_CASE);			}			return true;		}		$this->fields = false;		return false;	}		function _close() 	{		return @odbc_free_result($this->_queryID);			}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -