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

📄 adodb-mssql.inc.php

📁 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。 它通过snmpget来获取数据
💻 PHP
📖 第 1 页 / 共 2 页
字号:
			// returns true or false	function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)	{		if (!function_exists('mssql_pconnect')) return null;		$this->_connectionID = mssql_pconnect($argHostname,$argUsername,$argPassword);		if ($this->_connectionID === false) return false;				// persistent connections can forget to rollback on crash, so we do it here.		if ($this->autoRollback) {			$cnt = $this->GetOne('select @@TRANCOUNT');			while (--$cnt >= 0) $this->Execute('ROLLBACK TRAN'); 		}		if ($argDatabasename) return $this->SelectDB($argDatabasename);		return true;		}		function Prepare($sql)	{		$sqlarr = explode('?',$sql);		if (sizeof($sqlarr) <= 1) return $sql;		$sql2 = $sqlarr[0];		for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) {			$sql2 .=  '@P'.($i-1) . $sqlarr[$i];		} 		return array($sql,$this->qstr($sql2),$max);	}		function PrepareSP($sql)	{		if (!$this->_has_mssql_init) {			ADOConnection::outp( "PrepareSP: mssql_init only available since PHP 4.1.0");			return $sql;		}		$stmt = mssql_init($sql,$this->_connectionID);		if (!$stmt)  return $sql;		return array($sql,$stmt);	}		/* 	Usage:		$stmt = $db->PrepareSP('SP_RUNSOMETHING'); -- takes 2 params, @myid and @group				# note that the parameter does not have @ in front!		$db->Parameter($stmt,$id,'myid');		$db->Parameter($stmt,$group,'group',false,64);		$db->Execute($stmt);				@param $stmt Statement returned by Prepare() or PrepareSP().		@param $var PHP variable to bind to. Can set to null (for isNull support).		@param $name Name of stored procedure variable name to bind to.		@param [$isOutput] Indicates direction of parameter 0/false=IN  1=OUT  2= IN/OUT. This is ignored in oci8.		@param [$maxLen] Holds an maximum length of the variable.		@param [$type] The data type of $var. Legal values depend on driver.				See mssql_bind documentation at php.net.	*/	function Parameter(&$stmt, &$var, $name, $isOutput=false, $maxLen=4000, $type=false)	{		if (!$this->_has_mssql_init) {			ADOConnection::outp( "Parameter: mssql_bind only available since PHP 4.1.0");			return $sql;		}		$isNull = is_null($var); // php 4.0.4 and above...					if ($type === false) 			switch(gettype($var)) {			default:			case 'string': $type = SQLCHAR; break;			case 'double': $type = SQLFLT8; break;			case 'integer': $type = SQLINT4; break;			case 'boolean': $type = SQLINT1; break; # SQLBIT not supported in 4.1.0			}				if  ($this->debug) {			$prefix = ($isOutput) ? 'Out' : 'In';			$ztype = (empty($type)) ? 'false' : $type;			ADOConnection::outp( "{$prefix}Parameter(\$stmt, \$php_var='$var', \$name='$name', \$maxLen=$maxLen, \$type=$ztype);");		}		/*			See http://phplens.com/lens/lensforum/msgs.php?id=7231						RETVAL is HARD CODED into php_mssql extension:			The return value (a long integer value) is treated like a special OUTPUT parameter, 			called "RETVAL" (without the @). See the example at mssql_execute to 			see how it works. - type: one of this new supported PHP constants. 				SQLTEXT, SQLVARCHAR,SQLCHAR, SQLINT1,SQLINT2, SQLINT4, SQLBIT,SQLFLT8 		*/		if ($name !== 'RETVAL') $name = '@'.$name;		return mssql_bind($stmt[1], $name, $var, $type, $isOutput, $isNull, $maxLen);	}		/* 		Unfortunately, it appears that mssql cannot handle varbinary > 255 chars		So all your blobs must be of type "image".				Remember to set in php.ini the following...				; Valid range 0 - 2147483647. Default = 4096. 		mssql.textlimit = 0 ; zero to pass through 		; Valid range 0 - 2147483647. Default = 4096. 		mssql.textsize = 0 ; zero to pass through 	*/	function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')	{			if (strtoupper($blobtype) == 'CLOB') {			$sql = "UPDATE $table SET $column='" . $val . "' WHERE $where";			return $this->Execute($sql) != false;		}		$sql = "UPDATE $table SET $column=0x".bin2hex($val)." WHERE $where";		return $this->Execute($sql) != false;	}		// returns query ID if successful, otherwise false	function _query($sql,$inputarr)	{		$this->_errorMsg = false;		if (is_array($inputarr)) {						# bind input params with sp_executesql: 			# see http://www.quest-pipelines.com/newsletter-v3/0402_F.htm			# works only with sql server 7 and newer			if (!is_array($sql)) $sql = $this->Prepare($sql);			$params = '';			$decl = '';			$i = 0;			foreach($inputarr as $v) {				if ($decl) {					$decl .= ', ';					$params .= ', ';				}					if (is_string($v)) {					$len = strlen($v);					if ($len == 0) $len = 1;										if ($len > 4000 ) {						// NVARCHAR is max 4000 chars. Let's use NTEXT						$decl .= "@P$i NTEXT";					} else {						$decl .= "@P$i NVARCHAR($len)";					}					$params .= "@P$i=N". (strncmp($v,"'",1)==0? $v : $this->qstr($v));				} else if (is_integer($v)) {					$decl .= "@P$i INT";					$params .= "@P$i=".$v;				} else if (is_float($v)) {					$decl .= "@P$i FLOAT";					$params .= "@P$i=".$v;				} else if (is_bool($v)) {					$decl .= "@P$i INT"; # Used INT just in case BIT in not supported on the user's MSSQL version. It will cast appropriately.					$params .= "@P$i=".(($v)?'1':'0'); # True == 1 in MSSQL BIT fields and acceptable for storing logical true in an int field				} else {					$decl .= "@P$i CHAR"; # Used char because a type is required even when the value is to be NULL.					$params .= "@P$i=NULL";					}				$i += 1;			}			$decl = $this->qstr($decl);			if ($this->debug) ADOConnection::outp("<font size=-1>sp_executesql N{$sql[1]},N$decl,$params</font>");			$rez = mssql_query("sp_executesql N{$sql[1]},N$decl,$params");					} else if (is_array($sql)) {			# PrepareSP()			$rez = mssql_execute($sql[1]);					} else {			$rez = mssql_query($sql,$this->_connectionID);		}		return $rez;	}		// returns true or false	function _close()	{ 		if ($this->transCnt) $this->RollbackTrans();		$rez = @mssql_close($this->_connectionID);		$this->_connectionID = false;		return $rez;	}		// mssql uses a default date like Dec 30 2000 12:00AM	function UnixDate($v)	{		return ADORecordSet_array_mssql::UnixDate($v);	}		function UnixTimeStamp($v)	{		return ADORecordSet_array_mssql::UnixTimeStamp($v);	}	}	/*--------------------------------------------------------------------------------------	 Class Name: Recordset--------------------------------------------------------------------------------------*/class ADORecordset_mssql extends ADORecordSet {		var $databaseType = "mssql";	var $canSeek = true;	var $hasFetchAssoc; // see http://phplens.com/lens/lensforum/msgs.php?id=6083	// _mths works only in non-localised system		function ADORecordset_mssql($id,$mode=false)	{		// freedts check...		$this->hasFetchAssoc = function_exists('mssql_fetch_assoc');		if ($mode === false) { 			global $ADODB_FETCH_MODE;			$mode = $ADODB_FETCH_MODE;		}		$this->fetchMode = $mode;		return $this->ADORecordSet($id,$mode);	}			function _initrs()	{	GLOBAL $ADODB_COUNTRECS;			$this->_numOfRows = ($ADODB_COUNTRECS)? @mssql_num_rows($this->_queryID):-1;		$this->_numOfFields = @mssql_num_fields($this->_queryID);	}		//Contributed by "Sven Axelsson" <sven.axelsson@bokochwebb.se>	// get next resultset - requires PHP 4.0.5 or later	function NextRecordSet()	{		if (!mssql_next_result($this->_queryID)) return false;		$this->_inited = false;		$this->bind = false;		$this->_currentRow = -1;		$this->Init();		return true;	}	/* Use associative array to get fields array */	function Fields($colname)	{		if ($this->fetchMode != ADODB_FETCH_NUM) 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)]];	}		/*	Returns: an object containing field information. 		Get column information in the Recordset object. fetchField() can be used in order to obtain information about		fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by		fetchField() is retrieved.	*/	function FetchField($fieldOffset = -1) 	{		if ($fieldOffset != -1) {			return @mssql_fetch_field($this->_queryID, $fieldOffset);		}		else if ($fieldOffset == -1) {	/*	The $fieldOffset argument is not provided thus its -1 	*/			return @mssql_fetch_field($this->_queryID);		}		return null;	}		function _seek($row) 	{		return @mssql_data_seek($this->_queryID, $row);	}	// speedup	function MoveNext() 	{		if ($this->EOF) return false;				$this->_currentRow++;				if ($this->fetchMode & ADODB_FETCH_ASSOC) {			if ($this->fetchMode & ADODB_FETCH_NUM) {				//ADODB_FETCH_BOTH mode				$this->fields = @mssql_fetch_array($this->_queryID);			}			else {				if ($this->hasFetchAssoc) {// only for PHP 4.2.0 or later					 $this->fields = @mssql_fetch_assoc($this->_queryID);				} else {					$flds = @mssql_fetch_array($this->_queryID);					if (is_array($flds)) {						$fassoc = array();						foreach($flds as $k => $v) {							if (is_numeric($k)) continue;							$fassoc[$k] = $v;						}						$this->fields = $fassoc;					} else						$this->fields = false;				}			}						if (is_array($this->fields)) {				if (ADODB_ASSOC_CASE == 0) {					foreach($this->fields as $k=>$v) {						$this->fields[strtolower($k)] = $v;					}				} else if (ADODB_ASSOC_CASE == 1) {					foreach($this->fields as $k=>$v) {						$this->fields[strtoupper($k)] = $v;					}				}			}		} else {			$this->fields = @mssql_fetch_row($this->_queryID);		}		if ($this->fields) return true;		$this->EOF = true;				return false;	}		// INSERT UPDATE DELETE returns false even if no error occurs in 4.0.4	// also the date format has been changed from YYYY-mm-dd to dd MMM YYYY in 4.0.4. Idiot!	function _fetch($ignore_fields=false) 	{		if ($this->fetchMode & ADODB_FETCH_ASSOC) {			if ($this->fetchMode & ADODB_FETCH_NUM) {				//ADODB_FETCH_BOTH mode				$this->fields = @mssql_fetch_array($this->_queryID);			} else {				if ($this->hasFetchAssoc) // only for PHP 4.2.0 or later					$this->fields = @mssql_fetch_assoc($this->_queryID);				else {					$this->fields = @mssql_fetch_array($this->_queryID);					if (@is_array($$this->fields)) {						$fassoc = array();						foreach($$this->fields as $k => $v) {							if (is_integer($k)) continue;							$fassoc[$k] = $v;						}						$this->fields = $fassoc;					}				}			}						if (!$this->fields) {			} else if (ADODB_ASSOC_CASE == 0) {				foreach($this->fields as $k=>$v) {					$this->fields[strtolower($k)] = $v;				}			} else if (ADODB_ASSOC_CASE == 1) {				foreach($this->fields as $k=>$v) {					$this->fields[strtoupper($k)] = $v;				}			}		} else {			$this->fields = @mssql_fetch_row($this->_queryID);		}		return $this->fields;	}		/*	close() only needs to be called if you are worried about using too much memory while your script		is running. All associated result memory for the specified result identifier will automatically be freed.	*/	function _close() 	{		$rez = mssql_free_result($this->_queryID);			$this->_queryID = false;		return $rez;	}	// mssql uses a default date like Dec 30 2000 12:00AM	function UnixDate($v)	{		return ADORecordSet_array_mssql::UnixDate($v);	}		function UnixTimeStamp($v)	{		return ADORecordSet_array_mssql::UnixTimeStamp($v);	}	}class ADORecordSet_array_mssql extends ADORecordSet_array {	function ADORecordSet_array_mssql($id=-1,$mode=false) 	{		$this->ADORecordSet_array($id,$mode);	}			// mssql uses a default date like Dec 30 2000 12:00AM	function UnixDate($v)	{			if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixDate($v);			global $ADODB_mssql_mths,$ADODB_mssql_date_order;			//Dec 30 2000 12:00AM 		if ($ADODB_mssql_date_order == 'dmy') {			if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4})|" ,$v, $rr)) {				return parent::UnixDate($v);			}			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;						$theday = $rr[1];			$themth =  substr(strtoupper($rr[2]),0,3);		} else {			if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4})|" ,$v, $rr)) {				return parent::UnixDate($v);			}			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;						$theday = $rr[2];			$themth = substr(strtoupper($rr[1]),0,3);		}		$themth = $ADODB_mssql_mths[$themth];		if ($themth <= 0) return false;		// h-m-s-MM-DD-YY		return  mktime(0,0,0,$themth,$theday,$rr[3]);	}		function UnixTimeStamp($v)	{			if (is_numeric(substr($v,0,1)) && ADODB_PHPVER >= 0x4200) return parent::UnixTimeStamp($v);			global $ADODB_mssql_mths,$ADODB_mssql_date_order;			//Dec 30 2000 12:00AM		 if ($ADODB_mssql_date_order == 'dmy') {			 if (!preg_match( "|^([0-9]{1,2})[-/\. ]+([A-Za-z]{3})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|"			,$v, $rr)) return parent::UnixTimeStamp($v);			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;					$theday = $rr[1];			$themth =  substr(strtoupper($rr[2]),0,3);		} else {			if (!preg_match( "|^([A-Za-z]{3})[-/\. ]+([0-9]{1,2})[-/\. ]+([0-9]{4}) +([0-9]{1,2}):([0-9]{1,2}) *([apAP]{0,1})|"			,$v, $rr)) return parent::UnixTimeStamp($v);			if ($rr[3] <= TIMESTAMP_FIRST_YEAR) return 0;					$theday = $rr[2];			$themth = substr(strtoupper($rr[1]),0,3);		}				$themth = $ADODB_mssql_mths[$themth];		if ($themth <= 0) return false;				switch (strtoupper($rr[6])) {		case 'P':			if ($rr[4]<12) $rr[4] += 12;			break;		case 'A':			if ($rr[4]==12) $rr[4] = 0;			break;		default:			break;		}		// h-m-s-MM-DD-YY		return  mktime($rr[4],$rr[5],0,$themth,$theday,$rr[3]);	}}/*Code Example 1:select 	object_name(constid) as constraint_name,       	object_name(fkeyid) as table_name,         col_name(fkeyid, fkey) as column_name,	object_name(rkeyid) as referenced_table_name,   	col_name(rkeyid, rkey) as referenced_column_namefrom sysforeignkeyswhere object_name(fkeyid) = xorder by constraint_name, table_name, referenced_table_name,  keynoCode Example 2:select 	constraint_name,	column_name,	ordinal_positionfrom information_schema.key_column_usagewhere constraint_catalog = db_name()and table_name = xorder by constraint_name, ordinal_positionhttp://www.databasejournal.com/scripts/article.php/1440551*/?>

⌨️ 快捷键说明

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