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

📄 adodb-mssql.inc.php

📁 监控网络设备的程序
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/* V4.54 5 Nov 2004  (c) 2000-2004 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    Native mssql driver. Requires mssql client. Works on Windows.   To configure for Unix, see    	http://phpbuilder.com/columns/alberto20000919.php3	*/// security - hide pathsif (!defined('ADODB_DIR')) die();//----------------------------------------------------------------// MSSQL returns dates with the format Oct 13 2002 or 13 Oct 2002// and this causes tons of problems because localized versions of // MSSQL will return the dates in dmy or  mdy order; and also the // month strings depends on what language has been configured. The // following two variables allow you to control the localization// settings - Ugh.//// MORE LOCALIZATION INFO// ----------------------// To configure datetime, look for and modify sqlcommn.loc, //  	typically found in c:\mssql\install// Also read ://	 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q220918// Alternatively use:// 	   CONVERT(char(12),datecol,120)//----------------------------------------------------------------// has datetime converstion to YYYY-MM-DD format, and also mssql_fetch_associf (ADODB_PHPVER >= 0x4300) {// docs say 4.2.0, but testing shows only since 4.3.0 does it work!	ini_set('mssql.datetimeconvert',0); } else {global $ADODB_mssql_mths;		// array, months must be upper-case	$ADODB_mssql_date_order = 'mdy'; 	$ADODB_mssql_mths = array(		'JAN'=>1,'FEB'=>2,'MAR'=>3,'APR'=>4,'MAY'=>5,'JUN'=>6,		'JUL'=>7,'AUG'=>8,'SEP'=>9,'OCT'=>10,'NOV'=>11,'DEC'=>12);}//---------------------------------------------------------------------------// Call this to autoset $ADODB_mssql_date_order at the beginning of your code,// just after you connect to the database. Supports mdy and dmy only.// Not required for PHP 4.2.0 and above.function AutoDetect_MSSQL_Date_Order($conn){global $ADODB_mssql_date_order;	$adate = $conn->GetOne('select getdate()');	if ($adate) {		$anum = (int) $adate;		if ($anum > 0) {			if ($anum > 31) {				//ADOConnection::outp( "MSSQL: YYYY-MM-DD date format not supported currently");			} else				$ADODB_mssql_date_order = 'dmy';		} else			$ADODB_mssql_date_order = 'mdy';	}}class ADODB_mssql extends ADOConnection {	var $databaseType = "mssql";		var $dataProvider = "mssql";	var $replaceQuote = "''"; // string to use to replace quotes	var $fmtDate = "'Y-m-d'";	var $fmtTimeStamp = "'Y-m-d h:i:sA'";	var $hasInsertID = true;	var $substr = "substring";	var $length = 'len';	var $hasAffectedRows = true;	var $metaDatabasesSQL = "select name from sysdatabases where name <> 'master'";	var $metaTablesSQL="select name,case when type='U' then 'T' else 'V' end from sysobjects where (type='U' or type='V') and (name not in ('sysallocations','syscolumns','syscomments','sysdepends','sysfilegroups','sysfiles','sysfiles1','sysforeignkeys','sysfulltextcatalogs','sysindexes','sysindexkeys','sysmembers','sysobjects','syspermissions','sysprotects','sysreferences','systypes','sysusers','sysalternates','sysconstraints','syssegments','REFERENTIAL_CONSTRAINTS','CHECK_CONSTRAINTS','CONSTRAINT_TABLE_USAGE','CONSTRAINT_COLUMN_USAGE','VIEWS','VIEW_TABLE_USAGE','VIEW_COLUMN_USAGE','SCHEMATA','TABLES','TABLE_CONSTRAINTS','TABLE_PRIVILEGES','COLUMNS','COLUMN_DOMAIN_USAGE','COLUMN_PRIVILEGES','DOMAINS','DOMAIN_CONSTRAINTS','KEY_COLUMN_USAGE','dtproperties'))";	var $metaColumnsSQL = # xtype==61 is datetime"select c.name,t.name,c.length,	(case when c.xusertype=61 then 0 else c.xprec end),	(case when c.xusertype=61 then 0 else c.xscale end) 	from syscolumns c join systypes t on t.xusertype=c.xusertype join sysobjects o on o.id=c.id where o.name='%s'";	var $hasTop = 'top';		// support mssql SELECT TOP 10 * FROM TABLE	var $hasGenID = true;	var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';	var $sysTimeStamp = 'GetDate()';	var $_has_mssql_init;	var $maxParameterLen = 4000;	var $arrayClass = 'ADORecordSet_array_mssql';	var $uniqueSort = true;	var $leftOuter = '*=';	var $rightOuter = '=*';	var $ansiOuter = true; // for mssql7 or later	var $poorAffectedRows = true;	var $identitySQL = 'select @@IDENTITY'; // 'select SCOPE_IDENTITY'; # for mssql 2000	var $uniqueOrderBy = true;	var $_bindInputArray = true;			function ADODB_mssql() 	{				$this->_has_mssql_init = (strnatcmp(PHP_VERSION,'4.1.0')>=0);	}	function ServerInfo()	{	global $ADODB_FETCH_MODE;			$stmt = $this->PrepareSP('sp_server_info');		$val = 2;		if ($this->fetchMode === false) {			$savem = $ADODB_FETCH_MODE;			$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		} else 			$savem = $this->SetFetchMode(ADODB_FETCH_NUM);						$this->Parameter($stmt,$val,'attribute_id');		$row = $this->GetRow($stmt);				//$row = $this->GetRow("execute sp_server_info 2");				if ($this->fetchMode === false) {			$ADODB_FETCH_MODE = $savem;		} else			$this->SetFetchMode($savem);				$arr['description'] = $row[2];		$arr['version'] = ADOConnection::_findvers($arr['description']);		return $arr;	}		function IfNull( $field, $ifNull ) 	{		return " ISNULL($field, $ifNull) "; // if MS SQL Server	}		function _insertid()	{	// SCOPE_IDENTITY()	// Returns the last IDENTITY value inserted into an IDENTITY column in 	// the same scope. A scope is a module -- a stored procedure, trigger, 	// function, or batch. Thus, two statements are in the same scope if 	// they are in the same stored procedure, function, or batch.			return $this->GetOne($this->identitySQL);	}	function _affectedrows()	{		return $this->GetOne('select @@rowcount');	}	var $_dropSeqSQL = "drop table %s";		function CreateSequence($seq='adodbseq',$start=1)	{		$start -= 1;		$this->Execute("create table $seq (id float(53))");		$ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");		if (!$ok) {				$this->Execute('ROLLBACK TRANSACTION adodbseq');				return false;		}		$this->Execute('COMMIT TRANSACTION adodbseq'); 		return true;	}	function GenID($seq='adodbseq',$start=1)	{		//$this->debug=1;		$this->Execute('BEGIN TRANSACTION adodbseq');		$ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1");		if (!$ok) {			$this->Execute("create table $seq (id float(53))");			$ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");			if (!$ok) {				$this->Execute('ROLLBACK TRANSACTION adodbseq');				return false;			}			$this->Execute('COMMIT TRANSACTION adodbseq'); 			return $start;		}		$num = $this->GetOne("select id from $seq");		$this->Execute('COMMIT TRANSACTION adodbseq'); 		return $num;				// in old implementation, pre 1.90, we returned GUID...		//return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'");	}		function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)	{		if ($nrows > 0 && $offset <= 0) {			$sql = preg_replace(				'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop." $nrows ",$sql);			$rs =& $this->Execute($sql,$inputarr);		} else			$rs =& ADOConnection::SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);			return $rs;	}			// Format date column in sql string given an input format that understands Y M D	function SQLDate($fmt, $col=false)	{			if (!$col) $col = $this->sysTimeStamp;		$s = '';				$len = strlen($fmt);		for ($i=0; $i < $len; $i++) {			if ($s) $s .= '+';			$ch = $fmt[$i];			switch($ch) {			case 'Y':			case 'y':				$s .= "datename(yyyy,$col)";				break;			case 'M':				$s .= "convert(char(3),$col,0)";				break;			case 'm':				$s .= "replace(str(month($col),2),' ','0')";				break;			case 'Q':			case 'q':				$s .= "datename(quarter,$col)";				break;			case 'D':			case 'd':				$s .= "replace(str(day($col),2),' ','0')";				break;			case 'h':				$s .= "substring(convert(char(14),$col,0),13,2)";				break;						case 'H':				$s .= "replace(str(datepart(hh,$col),2),' ','0')";				break;							case 'i':				$s .= "replace(str(datepart(mi,$col),2),' ','0')";				break;			case 's':				$s .= "replace(str(datepart(ss,$col),2),' ','0')";				break;			case 'a':			case 'A':				$s .= "substring(convert(char(19),$col,0),18,2)";				break;							default:				if ($ch == '\\') {					$i++;					$ch = substr($fmt,$i,1);				}				$s .= $this->qstr($ch);				break;			}		}		return $s;	}		function BeginTrans()	{		if ($this->transOff) return true; 		$this->transCnt += 1;	   	$this->Execute('BEGIN TRAN');	   	return true;	}			function CommitTrans($ok=true) 	{ 		if ($this->transOff) return true; 		if (!$ok) return $this->RollbackTrans();		if ($this->transCnt) $this->transCnt -= 1;		$this->Execute('COMMIT TRAN');		return true;	}	function RollbackTrans()	{		if ($this->transOff) return true; 		if ($this->transCnt) $this->transCnt -= 1;		$this->Execute('ROLLBACK TRAN');		return true;	}		/*		Usage:				$this->BeginTrans();		$this->RowLock('table1,table2','table1.id=33 and table2.id=table1.id'); # lock row 33 for both tables				# some operation on both tables table1 and table2				$this->CommitTrans();				See http://www.swynk.com/friends/achigrik/SQL70Locks.asp	*/	function RowLock($tables,$where) 	{		if (!$this->transCnt) $this->BeginTrans();		return $this->GetOne("select top 1 null as ignore from $tables with (ROWLOCK,HOLDLOCK) where $where");	}			function &MetaIndexes($table,$primary=false)	{		$table = $this->qstr($table);		$sql = "SELECT i.name AS ind_name, C.name AS col_name, USER_NAME(O.uid) AS Owner, c.colid, k.Keyno, 			CASE WHEN I.indid BETWEEN 1 AND 254 AND (I.status & 2048 = 2048 OR I.Status = 16402 AND O.XType = 'V') THEN 1 ELSE 0 END AS IsPK,			CASE WHEN I.status & 2 = 2 THEN 1 ELSE 0 END AS IsUnique			FROM dbo.sysobjects o INNER JOIN dbo.sysindexes I ON o.id = i.id 			INNER JOIN dbo.sysindexkeys K ON I.id = K.id AND I.Indid = K.Indid 			INNER JOIN dbo.syscolumns c ON K.id = C.id AND K.colid = C.Colid			WHERE LEFT(i.name, 8) <> '_WA_Sys_' AND o.status >= 0 AND O.Name LIKE $table			ORDER BY O.name, I.Name, K.keyno";		global $ADODB_FETCH_MODE;		$save = $ADODB_FETCH_MODE;        $ADODB_FETCH_MODE = ADODB_FETCH_NUM;        if ($this->fetchMode !== FALSE) {        	$savem = $this->SetFetchMode(FALSE);        }                $rs = $this->Execute($sql);        if (isset($savem)) {        	$this->SetFetchMode($savem);        }        $ADODB_FETCH_MODE = $save;        if (!is_object($rs)) {        	return FALSE;        }		$indexes = array();		while ($row = $rs->FetchRow()) {			if (!$primary && $row[5]) continue;			            $indexes[$row[0]]['unique'] = $row[6];            $indexes[$row[0]]['columns'][] = $row[1];    	}        return $indexes;	}		function MetaForeignKeys($table, $owner=false, $upper=false)	{	global $ADODB_FETCH_MODE;			$save = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		$table = $this->qstr(strtoupper($table));				$sql = "select object_name(constid) as constraint_name,	col_name(fkeyid, fkey) as column_name,	object_name(rkeyid) as referenced_table_name,   	col_name(rkeyid, rkey) as referenced_column_namefrom sysforeignkeyswhere upper(object_name(fkeyid)) = $tableorder by constraint_name, referenced_table_name, keyno";				$constraints =& $this->GetArray($sql);				$ADODB_FETCH_MODE = $save;				$arr = false;		foreach($constraints as $constr) {			//print_r($constr);			$arr[$constr[0]][$constr[2]][] = $constr[1].'='.$constr[3]; 		}		if (!$arr) return false;				$arr2 = false;				foreach($arr as $k => $v) {			foreach($v as $a => $b) {				if ($upper) $a = strtoupper($a);				$arr2[$a] = $b;			}		}		return $arr2;	}	//From: Fernando Moreira <FMoreira@imediata.pt>	function MetaDatabases() 	{ 		if(@mssql_select_db("master")) { 				 $qry=$this->metaDatabasesSQL; 				 if($rs=@mssql_query($qry)){ 						 $tmpAr=$ar=array(); 						 while($tmpAr=@mssql_fetch_row($rs)) 								 $ar[]=$tmpAr[0]; 						@mssql_select_db($this->databaseName); 						 if(sizeof($ar)) 								 return($ar); 						 else 								 return(false); 				 } else { 						 @mssql_select_db($this->databaseName); 						 return(false); 				 } 		 } 		 return(false); 	} 	// "Stein-Aksel Basma" <basma@accelero.no>	// tested with MSSQL 2000	function &MetaPrimaryKeys($table)	{	global $ADODB_FETCH_MODE;			$schema = '';		$this->_findschema($table,$schema);		if (!$schema) $schema = $this->database;		if ($schema) $schema = "and k.table_catalog like '$schema%'"; 		$sql = "select distinct k.column_name,ordinal_position from information_schema.key_column_usage k,		information_schema.table_constraints tc 		where tc.constraint_name = k.constraint_name and tc.constraint_type =		'PRIMARY KEY' and k.table_name = '$table' $schema order by ordinal_position ";				$savem = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		$a = $this->GetCol($sql);		$ADODB_FETCH_MODE = $savem;				if ($a && sizeof($a)>0) return $a;		return false;	  	}		function &MetaTables($ttype=false,$showSchema=false,$mask=false) 	{		if ($mask) {			$save = $this->metaTablesSQL;			$mask = $this->qstr(($mask));			$this->metaTablesSQL .= " AND name like $mask";		}		$ret =& ADOConnection::MetaTables($ttype,$showSchema);				if ($mask) {			$this->metaTablesSQL = $save;		}		return $ret;	} 	function SelectDB($dbName) 	{		$this->databaseName = $dbName;		if ($this->_connectionID) {			return @mssql_select_db($dbName);				}		else return false;		}		function ErrorMsg() 	{		if (empty($this->_errorMsg)){			$this->_errorMsg = mssql_get_last_message();		}		return $this->_errorMsg;	}		function ErrorNo() 	{		if ($this->_logsql && $this->_errorCode !== false) return $this->_errorCode;		if (empty($this->_errorMsg)) {			$this->_errorMsg = mssql_get_last_message();		}		$id = @mssql_query("select @@ERROR",$this->_connectionID);		if (!$id) return false;		$arr = mssql_fetch_array($id);		@mssql_free_result($id);		if (is_array($arr)) return $arr[0];	   else return -1;	}		// returns true or false	function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)	{		if (!function_exists('mssql_pconnect')) return null;		$this->_connectionID = mssql_connect($argHostname,$argUsername,$argPassword);		if ($this->_connectionID === false) return false;		if ($argDatabasename) return $this->SelectDB($argDatabasename);		return true;		}

⌨️ 快捷键说明

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