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

📄 adodb.inc.php

📁 Typo3, 开源里边最强大的
💻 PHP
📖 第 1 页 / 共 5 页
字号:
				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;	}		function &Transpose(&$rs)	{		$rs2 =& $this->_rs2rs($rs);		$false = false;		if (!$rs2) return $false;				$rs2->_transpose();		return $rs2;	} 	/*		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')) {				$cls = ADODB_PEAR_Error();				return $cls;			} else {				$false = false;				return $false;			}		$arr =& $rs->GetArray();		$rs->Close();		return $arr;	}		function &CacheGetAll($secs2cache,$sql=false,$inputarr=false)	{		$arr =& $this->CacheGetArray($secs2cache,$sql,$inputarr);		return $arr;	}		function &CacheGetArray($secs2cache,$sql=false,$inputarr=false)	{	global $ADODB_COUNTRECS;				$savec = $ADODB_COUNTRECS;		$ADODB_COUNTRECS = false;		$rs =& $this->CacheExecute($secs2cache,$sql,$inputarr);		$ADODB_COUNTRECS = $savec;				if (!$rs) 			if (defined('ADODB_PEAR')) {				$cls = ADODB_PEAR_Error();				return $cls;			} else {				$false = false;				return $false;			}		$arr =& $rs->GetArray();		$rs->Close();		return $arr;	}				/**	* Return one row of sql statement. Recordset is disposed for you.	*	* @param sql			SQL statement	* @param [inputarr]		input bind array	*/	function &GetRow($sql,$inputarr=false)	{	global $ADODB_COUNTRECS;		$crecs = $ADODB_COUNTRECS;		$ADODB_COUNTRECS = false;				$rs =& $this->Execute($sql,$inputarr);				$ADODB_COUNTRECS = $crecs;		if ($rs) {			if (!$rs->EOF) $arr = $rs->fields;			else $arr = array();			$rs->Close();			return $arr;		}				$false = false;		return $false;	}		function &CacheGetRow($secs2cache,$sql=false,$inputarr=false)	{		$rs =& $this->CacheExecute($secs2cache,$sql,$inputarr);		if ($rs) {			$arr = false;			if (!$rs->EOF) $arr = $rs->fields;			$rs->Close();			return $arr;		}		$false = false;		return $false;	}		/**	* Insert or replace a single record. Note: this is not the same as MySQL's replace. 	* ADOdb's Replace() uses update-insert semantics, not insert-delete-duplicates of MySQL.	* Also note that no table locking is done currently, so it is possible that the	* record be inserted twice by two programs...	*	* $this->Replace('products', array('prodname' =>"'Nails'","price" => 3.99), 'prodname');	*	* $table		table name	* $fieldArray	associative array of data (you must quote strings yourself).	* $keyCol		the primary key field name or if compound key, array of field names	* autoQuote		set to true to use a hueristic to quote strings. Works with nulls and numbers	*					but does not work with dates nor SQL functions.	* has_autoinc	the primary key is an auto-inc field, so skip in insert.	*	* Currently blob replace not supported	*	* returns 0 = fail, 1 = update, 2 = insert 	*/		function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false)	{		global $ADODB_INCLUDED_LIB;		if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php');				return _adodb_replace($this, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc);	}			/**	* 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. 	*  CacheSelectLimit(15,'select * from table',3); will return rows 1 to 3 (1-based)	*  CacheSelectLimit(15,'select * from table',3,2); will return rows 3 to 5 (1-based)	*	* BUG: Currently CacheSelectLimit fails with $sql with LIMIT or TOP clause already set	*	* @param [secs2cache]	seconds to cache data, set to 0 to force query. This is optional	* @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	* @return		the recordset ($rs->databaseType == 'array') 	*/	function &CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false)	{			if (!is_numeric($secs2cache)) {			if ($sql === false) $sql = -1;			if ($offset == -1) $offset = false;									  // sql,	nrows, offset,inputarr			$rs =& $this->SelectLimit($secs2cache,$sql,$nrows,$offset,$this->cacheSecs);		} else {			if ($sql === false) ADOConnection::outp( "Warning: \$sql missing from CacheSelectLimit()");			$rs =& $this->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache);		}		return $rs;	}			/**	* Flush cached recordsets that match a particular $sql statement. 	* If $sql == false, then we purge all files in the cache. 	*/		/**   * Flush cached recordsets that match a particular $sql statement.    * If $sql == false, then we purge all files in the cache.    */	function CacheFlush($sql=false,$inputarr=false)	{	global $ADODB_CACHE_DIR;			if ($this->memCache) {		global $ADODB_INCLUDED_MEMCACHE;					$key = false;			if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php');			if ($sql) $key = $this->_gencachename($sql.serialize($inputarr),false,true);			FlushMemCache($key, $this->memCacheHost, $this->memCachePort, $this->debug);			return;		}			if (strlen($ADODB_CACHE_DIR) > 1 && !$sql) {         /*if (strncmp(PHP_OS,'WIN',3) === 0)            $dir = str_replace('/', '\\', $ADODB_CACHE_DIR);         else */            $dir = $ADODB_CACHE_DIR;                     if ($this->debug) {            ADOConnection::outp( "CacheFlush: $dir<br><pre>\n", $this->_dirFlush($dir),"</pre>");         } else {            $this->_dirFlush($dir);         }         return;      }             global $ADODB_INCLUDED_CSV;      if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php');            $f = $this->_gencachename($sql.serialize($inputarr),false);      adodb_write_file($f,''); // is adodb_write_file needed?      if (!@unlink($f)) {         if ($this->debug) ADOConnection::outp( "CacheFlush: failed for $f");      }   }      /**   * Private function to erase all of the files and subdirectories in a directory.   *   * Just specify the directory, and tell it if you want to delete the directory or just clear it out.   * Note: $kill_top_level is used internally in the function to flush subdirectories.   */   function _dirFlush($dir, $kill_top_level = false) {      if(!$dh = @opendir($dir)) return;            while (($obj = readdir($dh))) {         if($obj=='.' || $obj=='..')            continue;			         if (!@unlink($dir.'/'.$obj))			  $this->_dirFlush($dir.'/'.$obj, true);      }      if ($kill_top_level === true)         @rmdir($dir);      return true;   }      	function xCacheFlush($sql=false,$inputarr=false)	{	global $ADODB_CACHE_DIR;			if ($this->memCache) {			global $ADODB_INCLUDED_MEMCACHE;			$key = false;			if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php');			if ($sql) $key = $this->_gencachename($sql.serialize($inputarr),false,true);			flushmemCache($key, $this->memCacheHost, $this->memCachePort, $this->debug);			return;		}		if (strlen($ADODB_CACHE_DIR) > 1 && !$sql) {			if (strncmp(PHP_OS,'WIN',3) === 0) {				$cmd = 'del /s '.str_replace('/','\\',$ADODB_CACHE_DIR).'\adodb_*.cache';			} else {				//$cmd = 'find "'.$ADODB_CACHE_DIR.'" -type f -maxdepth 1 -print0 | xargs -0 rm -f';				$cmd = 'rm -rf '.$ADODB_CACHE_DIR.'/[0-9a-f][0-9a-f]/'; 				// old version 'rm -f `find '.$ADODB_CACHE_DIR.' -name adodb_*.cache`';			}			if ($this->debug) {				ADOConnection::outp( "CacheFlush: $cmd<br><pre>\n", system($cmd),"</pre>");			} else {				exec($cmd);			}			return;		} 				global $ADODB_INCLUDED_CSV;		if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php');				$f = $this->_gencachename($sql.serialize($inputarr),false);		adodb_write_file($f,''); // is adodb_write_file needed?		if (!@unlink($f)) {			if ($this->debug) ADOConnection::outp( "CacheFlush: failed for $f");		}	}		/**	* Private function to generate filename for caching.	* Filename is generated based on:	*	*  - sql statement	*  - database type (oci8, ibase, ifx, etc)	*  - database name	*  - userid	*  - setFetchMode (adodb 4.23)	*	* When not in safe mode, we create 256 sub-directories in the cache directory ($ADODB_CACHE_DIR). 	* Assuming that we can have 50,000 files per directory with good performance, 	* then we can scale to 12.8 million unique cached recordsets. Wow! 	*/	function _gencachename($sql,$createdir,$memcache=false)	{	global $ADODB_CACHE_DIR;	static $notSafeMode;				if ($this->fetchMode === false) { 		global $ADODB_FETCH_MODE;			$mode = $ADODB_FETCH_MODE;		} else {			$mode = $this->fetchMode;		}		$m = md5($sql.$this->databaseType.$this->database.$this->user.$mode);		if ($memcache) return $m;				if (!isset($notSafeMode)) $notSafeMode = !ini_get('safe_mode');		$dir = ($notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($m,0,2) : $ADODB_CACHE_DIR;					if ($createdir && $notSafeMode && !file_exists($dir)) {			$oldu = umask(0);			if (!mkdir($dir,0771)) 				if ($this->debug) ADOConnection::outp( "Unable to mkdir $dir for $sql");			umask($oldu);		}		return $dir.'/adodb_'.$m.'.cache';	}			/**	 * Execute SQL, caching recordsets.	 *	 * @param [secs2cache]	seconds to cache data, set to 0 to force query. 	 *					  This is an optional parameter.	 * @param sql		SQL statement to execute	 * @param [inputarr]	holds the input data  to bind to	 * @return 		RecordSet or false	 */	function &CacheExecute($secs2cache,$sql=false,$inputarr=false)	{					if (!is_numeric($secs2cache)) {			$inputarr = $sql;			$sql = $secs2cache;			$secs2cache = $this->cacheSecs;		}				if (is_array($sql)) {			$sqlparam = $sql;			$sql = $sql[0];		} else			$sqlparam = $sql;					if ($this->memCache) {			global $ADODB_INCLUDED_MEMCACHE;			if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php');			$md5file = $this->_gencachename($sql.serialize($inputarr),false,true);		} else {		global $ADODB_INCLUDED_CSV;			if (empty($ADODB_INCLUDED_CSV)) include(ADODB_DIR.'/adodb-csvlib.inc.php');			$md5file = $this->_gencachename($sql.serialize($inputarr),true);		}		$err = '';				if ($secs2cache > 0){			if ($this->memCache)				$rs = &getmemCache($md5file,$err,$secs2cache, $this->memCacheHost, $this->memCachePort);			else				$rs = &csv2rs($md5file,$err,$secs2cache,$this->arrayClass);			$this->numCacheHits += 1;		} else {			$err='Timeout 1';			$rs = false;			$this->numCacheMisses += 1;		}		if (!$rs) {		// no cached rs found			if ($this->debug) {				if (get_magic_quotes_runtime() && !$this->memCache) {					ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :(");				}				if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (see sql below)");			}						$rs = &$this->Execute($sqlparam,$inputarr);			if ($rs && $this->memCache) {				$rs = &$this->_rs2rs($rs); // read entire recordset into memory immediately				if(!putmemCache($md5file, $rs, $this->memCacheHost, $this->memCachePort, $this->memCacheCompress, $this->debug)) {					if ($fn = $this->raiseErrorFn)						$fn($this->databaseType,'CacheExecute',-32000,"Cache write error",$md5file,$sql,$this);					if ($this->debug) ADOConnection::outp( " Cache write error");				}			} else			if ($rs) {				$eof = $rs->EOF;				$rs = &$this->_rs2rs($rs); // read entire recordset into memory immediately				$txt = _rs2serialize($rs,false,$sql); // serialize						if (!adodb_write_file($md5file,$txt,$this->debug)) {					if ($fn = $this->raiseErrorFn) {						$fn($this->databaseType,'CacheExecute',-32000,"Cache write error",$md5file,$sql,$this);					}					if ($this->debug) ADOConnection::outp( " Cache write error");

⌨️ 快捷键说明

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