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

📄 adodb-mysqli.inc.php

📁 php聊天源码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		
		$ADODB_FETCH_MODE = $save;
		if ($rs === false) break;
		$retarr = array();
		while (!$rs->EOF){
		  $fld = new ADOFieldObject();
		  $fld->name = $rs->fields[0];
		  $fld->type = $rs->fields[1];
		  // split type into type(length):
		  if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array))
		    {
		      $fld->type = $query_array[1];
		      $fld->max_length = $query_array[2];
		    }
		  else
		    {
		      $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($fld->type,'blob') !== false);
		  if (!$fld->binary) 
		    {
		      $d = $rs->fields[4];
		      $d = $rs->fields['Default'];
		      if ($d != "" && $d != "NULL")
			{
			  $fld->has_default = true;
			  $fld->default_value = $d;
			} 
		      else 
			{
			  $fld->has_default = false;
			}
		    }
		  $retarr[strtoupper($fld->name)] = $fld;	
		  $rs->MoveNext();
		}
		break;
	      case ADODB_FETCH_ASSOC:
	      case ADODB_FETCH_DEFAULT:
	      case ADODB_FETCH_BOTH:
		$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
		$rs = $this->Execute(sprintf($this->metaColumnsSQL,
					     $table));
		$ADODB_FETCH_MODE = $save;
		if ($rs === false) break;
		$retarr = array();
		while (!$rs->EOF){
		  $fld = new ADOFieldObject();
		  $fld->name = $rs->fields['Field'];
		  $fld->type = $rs->fields['Type'];
				
		  // split type into type(length):
		  if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array))
		    {
		      $fld->type = $query_array[1];
		      $fld->max_length = $query_array[2];
		    }
		  else
		    {
		      $fld->max_length = -1;
		    }
		  $fld->not_null = ($rs->fields['Null'] != 'YES');
		  $fld->primary_key = ($rs->fields['Key'] == 'PRI');
		  $fld->auto_increment = (strpos($rs->fields['Extra'], 'auto_increment') !== false);
		  $fld->binary = (strpos($fld->type,'blob') !== false);
		  if (!$fld->binary) 
		    {
		      $d = $rs->fields['Default'];
		      if ($d != "" && $d != "NULL")
			{
			  $fld->has_default = true;
			  $fld->default_value = $d;
			} 
		      else 
			{
			  $fld->has_default = false;
			}
		    }
		  $retarr[strtoupper($fld->name)] = $fld;	
		  $rs->MoveNext();
		}
		break;
	      default:
	      }
	    
	    if ($rs === false) return false;
	    $rs->Close();
	    return $retarr;	
	  }
	  return false;
	}
		
	// 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->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;	
	}
	
	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';
	    // Added floating-point types
	    // Maybe not necessery.
	  case 'FLOAT':
	  case 'DOUBLE':
	    //		case 'DOUBLE PRECISION':
	  case 'DECIMAL':
	  case 'DEC':
	  case 'FIXED':
	  default: 
	    return 'N';
	  }
	}
	

}
 
}

?>

⌨️ 快捷键说明

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