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

📄 adodb-mysqli.inc.php

📁 一个bug追踪工具的PHP编写的源代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
			// split type into type(length):			$fld->scale = null;			if (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->type = $type;				$fld->max_length = -1;			}			$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($type,'blob') !== false);			$fld->unsigned = (strpos($type,'unsigned') !== 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;	}	// returns true or false	function SelectDB($dbName)	{//	    $this->_connectionID = $this->mysqli_resolve_link($this->_connectionID);	    $this->databaseName = $dbName;	    if ($this->_connectionID) {        	$result = @mysqli_select_db($this->_connectionID, $dbName);			if (!$result) {		    	ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg());			}			return $result;		}	    return false;	}	// parameters use PostgreSQL convention, not MySQL	function &SelectLimit($sql,			      $nrows = -1,			      $offset = -1,			      $inputarr = false,			      $arg3 = false,			      $secs = 0)	{		$offsetStr = ($offset >= 0) ? "$offset," : '';		if ($secs)			$rs =& $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3);		else			$rs =& $this->Execute($sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3);		return $rs;	}	function Prepare($sql)	{		return $sql;		$stmt = $this->_connectionID->prepare($sql);		if (!$stmt) {			echo $this->ErrorMsg();			return $sql;		}		return array($sql,$stmt);	}	// returns queryID or false	function _query($sql, $inputarr)	{	global $ADODB_COUNTRECS;		if (is_array($sql)) {			$stmt = $sql[1];			$a = '';			foreach($inputarr as $k => $v) {				if (is_string($v)) $a .= 's';				else if (is_integer($v)) $a .= 'i';				else $a .= 'd';			}			$fnarr =& array_merge( array($stmt,$a) , $inputarr);			$ret = call_user_func_array('mysqli_stmt_bind_param',$fnarr);			$ret = mysqli_stmt_execute($stmt);			return $ret;		}		if (!$mysql_res =  mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) {		    if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg());		    return false;		}		return $mysql_res;	}	/*	Returns: the last error message from previous database operation	*/	function ErrorMsg()	  {	    if (empty($this->_connectionID))	      $this->_errorMsg = @mysqli_error();	    else	      $this->_errorMsg = @mysqli_error($this->_connectionID);	    return $this->_errorMsg;	  }	/*	Returns: the last error number from previous database operation	*/	function ErrorNo()	  {	    if (empty($this->_connectionID))	      return @mysqli_errno();	    else	      return @mysqli_errno($this->_connectionID);	  }	// returns true or false	function _close()	  {	    @mysqli_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_mysqli extends ADORecordSet{	var $databaseType = "mysqli";	var $canSeek = true;	function ADORecordSet_mysqli($queryID, $mode = false)	{	  if ($mode === false)	   {	      global $ADODB_FETCH_MODE;	      $mode = $ADODB_FETCH_MODE;	   }	  switch ($mode)	    {	    case ADODB_FETCH_NUM:	      $this->fetchMode = MYSQLI_NUM;	      break;	    case ADODB_FETCH_ASSOC:	      $this->fetchMode = MYSQLI_ASSOC;	      break;	    case ADODB_FETCH_DEFAULT:	    case ADODB_FETCH_BOTH:	    default:	      $this->fetchMode = MYSQLI_BOTH;	      break;	    }	  $this->adodbFetchMode = $mode;	  $this->ADORecordSet($queryID);	}	function _initrs()	{	global $ADODB_COUNTRECS;		$this->_numOfRows = $ADODB_COUNTRECS ? @mysqli_num_rows($this->_queryID) : -1;		$this->_numOfFields = @mysqli_num_fields($this->_queryID);	}	function &FetchField($fieldOffset = -1)	{	  $fieldnr = $fieldOffset;	  if ($fieldOffset != -1) {	    $fieldOffset = mysqli_field_seek($this->_queryID, $fieldnr);	  }	  $o = mysqli_fetch_field($this->_queryID);	  return $o;	}	function &GetRowAssoc($upper = true)	{	  if ($this->fetchMode == MYSQLI_ASSOC && !$upper)	    return $this->fields;	  $row =& ADORecordSet::GetRowAssoc($upper);	  return $row;	}	/* Use associative array to get fields array */	function Fields($colname)	{	  if ($this->fetchMode != MYSQLI_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;	  if ($row < 0)	    return false;	  mysqli_data_seek($this->_queryID, $row);	  $this->EOF = false;	  return true;	}	// 10% speedup to move MoveNext to child class	// This is the only implementation that works now (23-10-2003).	// Other functions return no or the wrong results.	function MoveNext()	{		if ($this->EOF) return false;		$this->_currentRow++;		$this->fields = @mysqli_fetch_array($this->_queryID,$this->fetchMode);		if (is_array($this->fields)) return true;		$this->EOF = true;		return false;	}	function _fetch()	{		$this->fields = mysqli_fetch_array($this->_queryID,$this->fetchMode);	  	return is_array($this->fields);	}	function _close()	{		mysqli_free_result($this->_queryID);	  	$this->_queryID = false;	}/*0 = MYSQLI_TYPE_DECIMAL1 = MYSQLI_TYPE_CHAR1 = MYSQLI_TYPE_TINY2 = MYSQLI_TYPE_SHORT3 = MYSQLI_TYPE_LONG4 = MYSQLI_TYPE_FLOAT5 = MYSQLI_TYPE_DOUBLE6 = MYSQLI_TYPE_NULL7 = MYSQLI_TYPE_TIMESTAMP8 = MYSQLI_TYPE_LONGLONG9 = MYSQLI_TYPE_INT2410 = MYSQLI_TYPE_DATE11 = MYSQLI_TYPE_TIME12 = MYSQLI_TYPE_DATETIME13 = MYSQLI_TYPE_YEAR14 = MYSQLI_TYPE_NEWDATE247 = MYSQLI_TYPE_ENUM248 = MYSQLI_TYPE_SET249 = MYSQLI_TYPE_TINY_BLOB250 = MYSQLI_TYPE_MEDIUM_BLOB251 = MYSQLI_TYPE_LONG_BLOB252 = MYSQLI_TYPE_BLOB253 = MYSQLI_TYPE_VAR_STRING254 = MYSQLI_TYPE_STRING255 = MYSQLI_TYPE_GEOMETRY*/	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': */		case MYSQLI_TYPE_TINY_BLOB :		case MYSQLI_TYPE_CHAR :		case MYSQLI_TYPE_STRING :		case MYSQLI_TYPE_ENUM :		case MYSQLI_TYPE_SET :		case 253 :		   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':*/		case MYSQLI_TYPE_BLOB :		case MYSQLI_TYPE_LONG_BLOB :		case MYSQLI_TYPE_MEDIUM_BLOB :		   return !empty($fieldobj->binary) ? 'B' : 'X';		/*case 'YEAR':		case 'DATE': */		case MYSQLI_TYPE_DATE :		case MYSQLI_TYPE_YEAR :		   return 'D';		/*case 'TIME':		case 'DATETIME':		case 'TIMESTAMP':*/		case MYSQLI_TYPE_DATETIME :		case MYSQLI_TYPE_NEWDATE :		case MYSQLI_TYPE_TIME :		case MYSQLI_TYPE_TIMESTAMP :			return 'T';		/*case 'INT':		case 'INTEGER':		case 'BIGINT':		case 'TINYINT':		case 'MEDIUMINT':		case 'SMALLINT':		*/		case MYSQLI_TYPE_INT24 :		case MYSQLI_TYPE_LONG :		case MYSQLI_TYPE_LONGLONG :		case MYSQLI_TYPE_SHORT :		case MYSQLI_TYPE_TINY :		   if (!empty($fieldobj->primary_key)) return 'R';		   return 'I';		/*		   // Added floating-point types		   // Maybe not necessery.		 case 'FLOAT':		 case 'DOUBLE':		   //		case 'DOUBLE PRECISION':		 case 'DECIMAL':		 case 'DEC':		 case 'FIXED':*/		 default:		 	if (!is_numeric($t)) echo "<p>--- Error in type matching $t -----</p>";		 	return 'N';		}	} // function} // rs class}?>

⌨️ 快捷键说明

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