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

📄 adodb.inc.php

📁 股票监视器是一个简单的实用工具
💻 PHP
📖 第 1 页 / 共 5 页
字号:
	function CreateSequence($seqname='adodbseq',$startID=1)	{		if (empty($this->_genSeqSQL)) return false;		return $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID));	}	function DropSequence($seqname='adodbseq')	{		if (empty($this->_dropSeqSQL)) return false;		return $this->Execute(sprintf($this->_dropSeqSQL,$seqname));	}	/**	 * Generates a sequence id and stores it in $this->genID;	 * GenID is only available if $this->hasGenID = true;	 *	 * @param seqname		name of sequence to use	 * @param startID		if sequence does not exist, start at this ID	 * @return		0 if not supported, otherwise a sequence id	 */	function GenID($seqname='adodbseq',$startID=1)	{		if (!$this->hasGenID) {			return 0; // formerly returns false pre 1.60		}				$getnext = sprintf($this->_genIDSQL,$seqname);				$holdtransOK = $this->_transOK;		@($rs = $this->Execute($getnext));		if (!$rs) {			$this->_transOK = $holdtransOK; //if the status was ok before reset			$createseq = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID));			$rs = $this->Execute($getnext);		}		if ($rs && !$rs->EOF) $this->genID = reset($rs->fields);		else $this->genID = 0; // false			if ($rs) $rs->Close();		return $this->genID;	}		/**	 * @param $table string name of the table, not needed by all databases (eg. mysql), default ''	 * @param $column string name of the column, not needed by all databases (eg. mysql), default ''	 * @return  the last inserted ID. Not all databases support this.	 */ 	function Insert_ID($table='',$column='')	{		if ($this->_logsql && $this->lastInsID) return $this->lastInsID;		if ($this->hasInsertID) return $this->_insertid($table,$column);		if ($this->debug) {			ADOConnection::outp( '<p>Insert_ID error</p>');			adodb_backtrace();		}		return false;	}	/**	 * Portable Insert ID. Pablo Roca <pabloroca#mvps.org>	 *	 * @return  the last inserted ID. All databases support this. But aware possible	 * problems in multiuser environments. Heavy test this before deploying.	 */ 	function PO_Insert_ID($table="", $id="") 	{	   if ($this->hasInsertID){		   return $this->Insert_ID($table,$id);	   } else {		   return $this->GetOne("SELECT MAX($id) FROM $table");	   }	}	/**	* @return # rows affected by UPDATE/DELETE	*/ 	function Affected_Rows()	{		if ($this->hasAffectedRows) {			if ($this->fnExecute === 'adodb_log_sql') {				if ($this->_logsql && $this->_affected !== false) return $this->_affected;			}			$val = $this->_affectedrows();			return ($val < 0) ? false : $val;		}				  		if ($this->debug) ADOConnection::outp( '<p>Affected_Rows error</p>',false);		return false;	}			/**	 * @return  the last error message	 */	function ErrorMsg()	{		return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg;	}			/**	 * @return the last error number. Normally 0 means no error.	 */	function ErrorNo() 	{		return ($this->_errorMsg) ? -1 : 0;	}		function MetaError($err=false)	{		include_once(ADODB_DIR."/adodb-error.inc.php");		if ($err === false) $err = $this->ErrorNo();		return adodb_error($this->dataProvider,$this->databaseType,$err);	}		function MetaErrorMsg($errno)	{		include_once(ADODB_DIR."/adodb-error.inc.php");		return adodb_errormsg($errno);	}		/**	 * @returns an array with the primary key columns in it.	 */	function MetaPrimaryKeys($table, $owner=false)	{	// owner not used in base class - see oci8		$p = array();		$objs =& $this->MetaColumns($table);		if ($objs) {			foreach($objs as $v) {				if (!empty($v->primary_key))					$p[] = $v->name;			}		}		if (sizeof($p)) return $p;		if (function_exists('ADODB_VIEW_PRIMARYKEYS'))			return ADODB_VIEW_PRIMARYKEYS($this->databaseType, $this->database, $table, $owner);		return false;	}		/**	 * @returns assoc array where keys are tables, and values are foreign keys	 */	function MetaForeignKeys($table, $owner=false, $upper=false)	{		return false;	}	/**	 * Choose a database to connect to. Many databases do not support this.	 *	 * @param dbName 	is the name of the database to select	 * @return 		true or false	 */	function SelectDB($dbName) 	{return false;}			/**	* Will select, getting rows from $offset (1-based), for $nrows. 	* This simulates the MySQL "select * from table limit $offset,$nrows" , and	* the PostgreSQL "select * from table limit $nrows offset $offset". Note that	* MySQL and PostgreSQL parameter ordering is the opposite of the other.	* eg. 	*  SelectLimit('select * from table',3); will return rows 1 to 3 (1-based)	*  SelectLimit('select * from table',3,2); will return rows 3 to 5 (1-based)	*	* Uses SELECT TOP for Microsoft databases (when $this->hasTop is set)	* BUG: Currently SelectLimit fails with $sql with LIMIT or TOP clause already set	*	* @param sql	* @param [offset]	is the row to start calculations from (1-based)	* @param [nrows]		is the number of rows to get	* @param [inputarr]	array of bind variables	* @param [secs2cache]		is a private parameter only used by jlim	* @return		the recordset ($rs->databaseType == 'array') 	*/	function &SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0)	{		if ($this->hasTop && $nrows > 0) {		// suggested by Reinhard Balling. Access requires top after distinct 		 // Informix requires first before distinct - F Riosa			$ismssql = (strpos($this->databaseType,'mssql') !== false);			if ($ismssql) $isaccess = false;			else $isaccess = (strpos($this->databaseType,'access') !== false);						if ($offset <= 0) {									// access includes ties in result					if ($isaccess) {						$sql = preg_replace(						'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);						if ($secs2cache>0) {							$ret =& $this->CacheExecute($secs2cache, $sql,$inputarr);						} else {							$ret =& $this->Execute($sql,$inputarr);						}						return $ret; // PHP5 fix					} else if ($ismssql){						$sql = preg_replace(						'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);					} else {						$sql = preg_replace(						'/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nrows.' ',$sql);					}			} else {				$nn = $nrows + $offset;				if ($isaccess || $ismssql) {					$sql = preg_replace(					'/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql);				} else {					$sql = preg_replace(					'/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql);				}			}		}				// if $offset>0, we want to skip rows, and $ADODB_COUNTRECS is set, we buffer  rows		// 0 to offset-1 which will be discarded anyway. So we disable $ADODB_COUNTRECS.		global $ADODB_COUNTRECS;				$savec = $ADODB_COUNTRECS;		$ADODB_COUNTRECS = false;					if ($offset>0){			if ($secs2cache>0) $rs = &$this->CacheExecute($secs2cache,$sql,$inputarr);			else $rs = &$this->Execute($sql,$inputarr);		} else {			if ($secs2cache>0) $rs = &$this->CacheExecute($secs2cache,$sql,$inputarr);			else $rs = &$this->Execute($sql,$inputarr);		}		$ADODB_COUNTRECS = $savec;		if ($rs && !$rs->EOF) {			$rs =& $this->_rs2rs($rs,$nrows,$offset);		}		//print_r($rs);		return $rs;	}		/**	* Create serializable recordset. Breaks rs link to connection.	*	* @param rs			the recordset to serialize	*/	function &SerializableRS(&$rs)	{		$rs2 =& $this->_rs2rs($rs);		$ignore = false;		$rs2->connection =& $ignore;				return $rs2;	}		/**	* Convert database recordset to an array recordset	* input recordset's cursor should be at beginning, and	* old $rs will be closed.	*	* @param rs			the recordset to copy	* @param [nrows]  	number of rows to retrieve (optional)	* @param [offset] 	offset by number of rows (optional)	* @return 			the new recordset	*/	function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true)	{		if (! $rs) {			$false = false;			return $false;		}		$dbtype = $rs->databaseType;		if (!$dbtype) {			$rs = &$rs;  // required to prevent crashing in 4.2.1, but does not happen in 4.3.1 -- why ?			return $rs;		}		if (($dbtype == 'array' || $dbtype == 'csv') && $nrows == -1 && $offset == -1) {			$rs->MoveFirst();			$rs = &$rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1-- why ?			return $rs;		}		$flds = array();		for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) {			$flds[] = $rs->FetchField($i);		}		$arr =& $rs->GetArrayLimit($nrows,$offset);		//print_r($arr);		if ($close) $rs->Close();				$arrayClass = $this->arrayClass;				$rs2 =& new $arrayClass();		$rs2->connection = &$this;		$rs2->sql = $rs->sql;		$rs2->dataProvider = $this->dataProvider;		$rs2->InitArrayFields($arr,$flds);		$rs2->fetchMode = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode;		return $rs2;	}		/*	* Return all rows. Compat with PEAR DB	*/	function &GetAll($sql, $inputarr=false)	{		$arr =& $this->GetArray($sql,$inputarr);		return $arr;	}		function &GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false)	{		$rs =& $this->Execute($sql, $inputarr);		if (!$rs) {			$false = false;			return $false;		}		$arr =& $rs->GetAssoc($force_array,$first2cols);		return $arr;	}		function &CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false)	{		if (!is_numeric($secs2cache)) {			$first2cols = $force_array;			$force_array = $inputarr;		}		$rs =& $this->CacheExecute($secs2cache, $sql, $inputarr);		if (!$rs) {			$false = false;			return $false;		}		$arr =& $rs->GetAssoc($force_array,$first2cols);		return $arr;	}		/**	* Return first element of first row of sql statement. Recordset is disposed	* for you.	*	* @param sql			SQL statement	* @param [inputarr]		input bind array	*/	function GetOne($sql,$inputarr=false)	{	global $ADODB_COUNTRECS;		$crecs = $ADODB_COUNTRECS;		$ADODB_COUNTRECS = false;				$ret = false;		$rs = &$this->Execute($sql,$inputarr);		if ($rs) {					if (!$rs->EOF) $ret = reset($rs->fields);			$rs->Close();		}		$ADODB_COUNTRECS = $crecs;		return $ret;	}		function CacheGetOne($secs2cache,$sql=false,$inputarr=false)	{		$ret = false;		$rs = &$this->CacheExecute($secs2cache,$sql,$inputarr);		if ($rs) {					if (!$rs->EOF) $ret = reset($rs->fields);			$rs->Close();		} 				return $ret;	}		function GetCol($sql, $inputarr = false, $trim = false)	{	  	$rv = false;	  	$rs = &$this->Execute($sql, $inputarr);	  	if ($rs) {			$rv = array();	   		if ($trim) {				while (!$rs->EOF) {					$rv[] = trim(reset($rs->fields));					$rs->MoveNext();		   		}			} else {				while (!$rs->EOF) {					$rv[] = reset($rs->fields);					$rs->MoveNext();		   		}			}	   		$rs->Close();	  	}	  	return $rv;	}		function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false)	{	  	$rv = false;	  	$rs = &$this->CacheExecute($secs, $sql, $inputarr);	  	if ($rs) {			if ($trim) {				while (!$rs->EOF) {					$rv[] = trim(reset($rs->fields));					$rs->MoveNext();		   		}			} else {				while (!$rs->EOF) {					$rv[] = reset($rs->fields);					$rs->MoveNext();		   		}			}	   		$rs->Close();	  	}	  	return $rv;	} 	/*		Calculate the offset of a date for a particular database and generate			appropriate SQL. Useful for calculating future/past dates and storing			in a database.					If dayFraction=1.5 means 1.5 days from now, 1.0/24 for 1 hour.	*/	function OffsetDate($dayFraction,$date=false)	{				if (!$date) $date = $this->sysDate;		return  '('.$date.'+'.$dayFraction.')';	}			/**	*	* @param sql			SQL statement	* @param [inputarr]		input bind array	*/	function &GetArray($sql,$inputarr=false)	{	global $ADODB_COUNTRECS;				$savec = $ADODB_COUNTRECS;		$ADODB_COUNTRECS = false;		$rs =& $this->Execute($sql,$inputarr);		$ADODB_COUNTRECS = $savec;		if (!$rs) 			if (defined('ADODB_PEAR')) return ADODB_PEAR_Error();			else {

⌨️ 快捷键说明

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