adodb-mysql.inc.php

来自「PhpWiki是sourceforge的一个开源项目」· PHP 代码 · 共 680 行 · 第 1/2 页

PHP
680
字号
		return true;		}		function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename)	{		$this->forceNewConnect = true;		return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);	}	 	function &MetaColumns($table) 	{			if ($this->metaColumnsSQL) {		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(sprintf($this->metaColumnsSQL,$table));						if (isset($savem)) $this->SetFetchMode($savem);			$ADODB_FETCH_MODE = $save;						if ($rs === false) return false;						$retarr = array();			while (!$rs->EOF){				$fld = new ADOFieldObject();				$fld->name = $rs->fields[0];				$type = $rs->fields[1];												// split type into type(length):				$fld->scale = null;				if (strpos($type,',') && preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {					$fld->type = $query_array[1];					$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;					$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;				} elseif (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {					$fld->type = $query_array[1];					$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;				} else {					$fld->max_length = -1;					$fld->type = $type;				}				/*				// split type into type(length):				if (preg_match("/^(.+)\((\d+)/", $type, $query_array)) {					$fld->type = $query_array[1];					$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;				} else {					$fld->max_length = -1;					$fld->type = $type;				}*/				$fld->not_null = ($rs->fields[2] != 'YES');				$fld->primary_key = ($rs->fields[3] == 'PRI');				$fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false);				$fld->binary = (strpos($fld->type,'blob') !== false);								if (!$fld->binary) {					$d = $rs->fields[4];					if ($d != "" && $d != "NULL") {						$fld->has_default = true;						$fld->default_value = $d;					} else {						$fld->has_default = false;					}				}				if ($save == ADODB_FETCH_NUM) $retarr[] = $fld;					else $retarr[strtoupper($fld->name)] = $fld;				$rs->MoveNext();			}			$rs->Close();			return $retarr;			}		return false;	}			// returns true or false	function SelectDB($dbName) 	{		$this->databaseName = $dbName;		if ($this->_connectionID) {			return @mysql_select_db($dbName,$this->_connectionID);				}		else return false;		}		// parameters use PostgreSQL convention, not MySQL	function &SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs=0)	{		$offsetStr =($offset>=0) ? "$offset," : '';				if ($secs)			$rs =& $this->CacheExecute($secs,$sql." LIMIT $offsetStr$nrows",$inputarr);		else			$rs =& $this->Execute($sql." LIMIT $offsetStr$nrows",$inputarr);		return $rs;	}			// returns queryID or false	function _query($sql,$inputarr)	{	//global $ADODB_COUNTRECS;		//if($ADODB_COUNTRECS) 		return mysql_query($sql,$this->_connectionID);		//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6	}	/*	Returns: the last error message from previous database operation	*/		function ErrorMsg() 	{			if ($this->_logsql) return $this->_errorMsg;		if (empty($this->_connectionID)) $this->_errorMsg = @mysql_error();		else $this->_errorMsg = @mysql_error($this->_connectionID);		return $this->_errorMsg;	}		/*	Returns: the last error number from previous database operation	*/		function ErrorNo() 	{		if ($this->_logsql) return $this->_errorCode;		if (empty($this->_connectionID))  return @mysql_errno();		else return @mysql_errno($this->_connectionID);	}			// returns true or false	function _close()	{		@mysql_close($this->_connectionID);		$this->_connectionID = false;	}		/*	* Maximum size of C field	*/	function CharMax()	{		return 255; 	}		/*	* Maximum size of X field	*/	function TextMax()	{		return 4294967295; 	}	}	/*--------------------------------------------------------------------------------------	 Class Name: Recordset--------------------------------------------------------------------------------------*/class ADORecordSet_mysql extends ADORecordSet{			var $databaseType = "mysql";	var $canSeek = true;		function ADORecordSet_mysql($queryID,$mode=false) 	{		if ($mode === false) { 			global $ADODB_FETCH_MODE;			$mode = $ADODB_FETCH_MODE;		}		switch ($mode)		{		case ADODB_FETCH_NUM: $this->fetchMode = MYSQL_NUM; break;		case ADODB_FETCH_ASSOC:$this->fetchMode = MYSQL_ASSOC; break;		default:		case ADODB_FETCH_DEFAULT:		case ADODB_FETCH_BOTH:$this->fetchMode = MYSQL_BOTH; break;		}			$this->ADORecordSet($queryID);		}		function _initrs()	{	//GLOBAL $ADODB_COUNTRECS;	//	$this->_numOfRows = ($ADODB_COUNTRECS) ? @mysql_num_rows($this->_queryID):-1;		$this->_numOfRows = @mysql_num_rows($this->_queryID);		$this->_numOfFields = @mysql_num_fields($this->_queryID);	}		function &FetchField($fieldOffset = -1) 	{				if ($fieldOffset != -1) {			$o = @mysql_fetch_field($this->_queryID, $fieldOffset);			$f = @mysql_field_flags($this->_queryID,$fieldOffset);			$o->max_length = @mysql_field_len($this->_queryID,$fieldOffset); // suggested by: Jim Nicholson (jnich@att.com)			//$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable			$o->binary = (strpos($f,'binary')!== false);		}		else if ($fieldOffset == -1) {	/*	The $fieldOffset argument is not provided thus its -1 	*/			$o = @mysql_fetch_field($this->_queryID);			$o->max_length = @mysql_field_len($this->_queryID); // suggested by: Jim Nicholson (jnich@att.com)			//$o->max_length = -1; // mysql returns the max length less spaces -- so it is unrealiable		}					return $o;	}	function &GetRowAssoc($upper=true)	{		if ($this->fetchMode == MYSQL_ASSOC && !$upper) return $this->fields;		$row =& ADORecordSet::GetRowAssoc($upper);		return $row;	}		/* Use associative array to get fields array */	function Fields($colname)	{			// added @ by "Michael William Miller" <mille562@pilot.msu.edu>		if ($this->fetchMode != MYSQL_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)]];	}		function _seek($row)	{		if ($this->_numOfRows == 0) return false;		return @mysql_data_seek($this->_queryID,$row);	}			// 10% speedup to move MoveNext to child class	function MoveNext() 	{	//global $ADODB_EXTENSION;if ($ADODB_EXTENSION) return adodb_movenext($this);			if ($this->EOF) return false;						$this->_currentRow++;		$this->fields = @mysql_fetch_array($this->_queryID,$this->fetchMode);		if (is_array($this->fields)) return true;				$this->EOF = true;				/* -- tested raising an error -- appears pointless		$conn = $this->connection;		if ($conn && $conn->raiseErrorFn && ($errno = $conn->ErrorNo())) {			$fn = $conn->raiseErrorFn;			$fn($conn->databaseType,'MOVENEXT',$errno,$conn->ErrorMsg().' ('.$this->sql.')',$conn->host,$conn->database);		}		*/		return false;	}			function _fetch()	{		$this->fields =  @mysql_fetch_array($this->_queryID,$this->fetchMode);		return is_array($this->fields);	}		function _close() {		@mysql_free_result($this->_queryID);			$this->_queryID = false;		}		function MetaType($t,$len=-1,$fieldobj=false)	{		if (is_object($t)) {			$fieldobj = $t;			$t = $fieldobj->type;			$len = $fieldobj->max_length;		}				$len = -1; // mysql max_length is not accurate		switch (strtoupper($t)) {		case 'STRING': 		case 'CHAR':		case 'VARCHAR': 		case 'TINYBLOB': 		case 'TINYTEXT': 		case 'ENUM': 		case 'SET': 			if ($len <= $this->blobSize) return 'C';					case 'TEXT':		case 'LONGTEXT': 		case 'MEDIUMTEXT':			return 'X';					// php_mysql extension always returns 'blob' even if 'text'		// so we have to check whether binary...		case 'IMAGE':		case 'LONGBLOB': 		case 'BLOB':		case 'MEDIUMBLOB':			return !empty($fieldobj->binary) ? 'B' : 'X';					case 'YEAR':		case 'DATE': return 'D';				case 'TIME':		case 'DATETIME':		case 'TIMESTAMP': return 'T';				case 'INT': 		case 'INTEGER':		case 'BIGINT':		case 'TINYINT':		case 'MEDIUMINT':		case 'SMALLINT': 						if (!empty($fieldobj->primary_key)) return 'R';			else return 'I';				default: return 'N';		}	}}}// (c-file-style: "gnu")// Local Variables:// mode: php// tab-width: 8// c-basic-offset: 4// c-hanging-comment-ender-p: nil// indent-tabs-mode: nil// End:   ?>

⌨️ 快捷键说明

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