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

📄 adodb-mssql.inc.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
		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,$this->_connectionID)){ 						 $tmpAr=$ar=array(); 						 while($tmpAr=@mssql_fetch_row($rs)) 								 $ar[]=$tmpAr[0]; 						@mssql_select_db($this->database); 						 if(sizeof($ar)) 								 return($ar); 						 else 								 return(false); 				 } else { 						 @mssql_select_db($this->database); 						 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;		$false = false;		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->database = $dbName;		$this->databaseName = $dbName; # obsolete, retained for compat with older adodb versions		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;		}			// 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);	}		// returns concatenated string    // MSSQL requires integers to be cast as strings    // automatically cast every datatype to VARCHAR(255)    // @author David Rogers (introspectshun)    function Concat()    {            $s = "";            $arr = func_get_args();            // Split single record on commas, if possible            if (sizeof($arr) == 1) {                foreach ($arr as $arg) {                    $args = explode(',', $arg);                }                $arr = $args;            }            array_walk($arr, create_function('&$v', '$v = "CAST(" . $v . " AS VARCHAR(255))";'));            $s = implode('+',$arr);            if (sizeof($arr) > 0) return "$s";            			return '';    }		/* 	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 false;		}		$isNull = is_null($var); // php 4.0.4 and above...					if ($type === false) 			switch(gettype($var)) {			default:			case 'string': $type = SQLVARCHAR; 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;

⌨️ 快捷键说明

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