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

📄 adodb-ibase.inc.php

📁 一个bug追踪工具的PHP编写的源代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
				    } // switch				}				break;			case 10:				$fld->type = 'float';				break;			case 14:				$fld->type = 'char';				break;			case 27:				if ($fscale !=0) {				    $fld->type = 'decimal';					$fld->max_length = 15;					$fld->scale = 5;				} else {					$fld->type = 'double';				}				break;			case 35:				if ($dialect3) {				    $fld->type = 'timestamp';				} else {					$fld->type = 'date';				}				break;			case 12:				$fld->type = 'date';				break;			case 13:				$fld->type = 'time';				break;			case 37:				$fld->type = 'varchar';				break;			case 40:				$fld->type = 'cstring';				break;			case 261:				$fld->type = 'blob';				$fld->max_length = -1;				break;		} // switch	}	//OPN STUFF end		// returns array of ADOFieldObjects for current table	function &MetaColumns($table)	{	global $ADODB_FETCH_MODE;		$save = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		$rs = $this->Execute(sprintf($this->metaColumnsSQL,strtoupper($table)));		$ADODB_FETCH_MODE = $save;		if ($rs === false) {			$false = false;			return $false;		}		$retarr = array();		//OPN STUFF start		$dialect3 = ($this->dialect==3 ? true : false);		//OPN STUFF end		while (!$rs->EOF) { //print_r($rs->fields);			$fld = new ADOFieldObject();			$fld->name = trim($rs->fields[0]);			//OPN STUFF start			$this->_ConvertFieldType($fld, $rs->fields[7], $rs->fields[3], $rs->fields[4], $rs->fields[5], $rs->fields[6], $dialect3);			if (isset($rs->fields[1]) && $rs->fields[1]) {				$fld->not_null = true;			}			if (isset($rs->fields[2])) {				$fld->has_default = true;				$d = substr($rs->fields[2],strlen('default '));				switch ($fld->type)				{				case 'smallint':				case 'integer': $fld->default_value = (int) $d; break;				case 'char':				case 'blob':				case 'text':				case 'varchar': $fld->default_value = (string) substr($d,1,strlen($d)-2); break;				case 'double':				case 'float': $fld->default_value = (float) $d; break;				default: $fld->default_value = $d; break;				}		//	case 35:$tt = 'TIMESTAMP'; break;			}			if ((isset($rs->fields[5])) && ($fld->type == 'blob')) {				$fld->sub_type = $rs->fields[5];			} else {				$fld->sub_type = null;			}			//OPN STUFF end			if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;			else $retarr[strtoupper($fld->name)] = $fld;			$rs->MoveNext();		}		$rs->Close();		return empty($retarr) ? false : $retarr;	}	function BlobEncode( $blob )	{		$blobid = ibase_blob_create( $this->_connectionID);		ibase_blob_add( $blobid, $blob );		return ibase_blob_close( $blobid );	}	// since we auto-decode all blob's since 2.42,	// BlobDecode should not do any transforms	function BlobDecode($blob)	{		return $blob;	}	// old blobdecode function	// still used to auto-decode all blob's	function _BlobDecode( $blob )	{		$blobid = ibase_blob_open( $blob );		$realblob = ibase_blob_get( $blobid,$this->maxblobsize); // 2nd param is max size of blob -- Kevin Boillet <kevinboillet@yahoo.fr>		while($string = ibase_blob_get($blobid, 8192)){			$realblob .= $string;		}		ibase_blob_close( $blobid );		return( $realblob );	}	function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB')	{		$fd = fopen($path,'rb');		if ($fd === false) return false;		$blob_id = ibase_blob_create($this->_connectionID);		/* fill with data */		while ($val = fread($fd,32768)){			ibase_blob_add($blob_id, $val);		}		/* close and get $blob_id_str for inserting into table */		$blob_id_str = ibase_blob_close($blob_id);		fclose($fd);		return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false;	}	/*		Insert a null into the blob field of the table first.		Then use UpdateBlob to store the blob.		Usage:		$conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');		$conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');	*/	function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')	{	$blob_id = ibase_blob_create($this->_connectionID);	// ibase_blob_add($blob_id, $val);	// replacement that solves the problem by which only the first modulus 64K /	// of $val are stored at the blob field ////////////////////////////////////	// Thx Abel Berenstein  aberenstein#afip.gov.ar	$len = strlen($val);	$chunk_size = 32768;	$tail_size = $len % $chunk_size;	$n_chunks = ($len - $tail_size) / $chunk_size;	for ($n = 0; $n < $n_chunks; $n++) {		$start = $n * $chunk_size;		$data = substr($val, $start, $chunk_size);		ibase_blob_add($blob_id, $data);	}	if ($tail_size) {		$start = $n_chunks * $chunk_size;		$data = substr($val, $start, $tail_size);		ibase_blob_add($blob_id, $data);	}	// end replacement /////////////////////////////////////////////////////////	$blob_id_str = ibase_blob_close($blob_id);	return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false;	}	function OldUpdateBlob($table,$column,$val,$where,$blobtype='BLOB')	{		$blob_id = ibase_blob_create($this->_connectionID);		ibase_blob_add($blob_id, $val);		$blob_id_str = ibase_blob_close($blob_id);		return $this->Execute("UPDATE $table SET $column=(?) WHERE $where",array($blob_id_str)) != false;	}	// Format date column in sql string given an input format that understands Y M D	// Only since Interbase 6.0 - uses EXTRACT	// problem - does not zero-fill the day and month yet	function SQLDate($fmt, $col=false)	{		if (!$col) $col = $this->sysDate;		$s = '';		$len = strlen($fmt);		for ($i=0; $i < $len; $i++) {			if ($s) $s .= '||';			$ch = $fmt[$i];			switch($ch) {			case 'Y':			case 'y':				$s .= "extract(year from $col)";				break;			case 'M':			case 'm':				$s .= "extract(month from $col)";				break;			case 'Q':			case 'q':				$s .= "cast(((extract(month from $col)+2) / 3) as integer)";				break;			case 'D':			case 'd':				$s .= "(extract(day from $col))";				break;			case 'H':			case 'h':			  $s .= "(extract(hour from $col))";			  break;			case 'I':			case 'i':			  $s .= "(extract(minute from $col))";			  break;			case 'S':			case 's':			  $s .= "CAST((extract(second from $col)) AS INTEGER)";			  break;			default:				if ($ch == '\\') {					$i++;					$ch = substr($fmt,$i,1);				}				$s .= $this->qstr($ch);				break;			}		}		return $s;	}}/*--------------------------------------------------------------------------------------		 Class Name: Recordset--------------------------------------------------------------------------------------*/class ADORecordset_ibase extends ADORecordSet{	var $databaseType = "ibase";	var $bind=false;	var $_cacheType;	function ADORecordset_ibase($id,$mode=false)	{	global $ADODB_FETCH_MODE;			$this->fetchMode = ($mode === false) ? $ADODB_FETCH_MODE : $mode;			$this->ADORecordSet($id);	}	/*		Returns: an object containing field information.			Get column information in the Recordset object. fetchField() can be used in order to obtain information about			fields in a certain query result. If the field offset isn't specified, the next field that wasn't yet retrieved by			fetchField() is retrieved.		*/	function &FetchField($fieldOffset = -1)	{			 $fld = new ADOFieldObject;			 $ibf = ibase_field_info($this->_queryID,$fieldOffset);			 switch (ADODB_ASSOC_CASE) {			 case 2: // the default			 	$fld->name = ($ibf['alias']);				 if (empty($fld->name)) $fld->name = ($ibf['name']);				 break;			 case 0:				 $fld->name = strtoupper($ibf['alias']);				 if (empty($fld->name)) $fld->name = strtoupper($ibf['name']);				 break;			 case 1:			 	$fld->name = strtolower($ibf['alias']);				 if (empty($fld->name)) $fld->name = strtolower($ibf['name']);				 break;			 }			 $fld->type = $ibf['type'];			 $fld->max_length = $ibf['length'];			 /*       This needs to be populated from the metadata */			 $fld->not_null = false;			 $fld->has_default = false;			 $fld->default_value = 'null';			 return $fld;	}	function _initrs()	{		$this->_numOfRows = -1;		$this->_numOfFields = @ibase_num_fields($this->_queryID);		// cache types for blob decode check		for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) {			$f1 = $this->FetchField($i);			$this->_cacheType[] = $f1->type;		}	}	function _seek($row)	{		return false;	}	function _fetch()	{		$f = @ibase_fetch_row($this->_queryID);		if ($f === false) {			$this->fields = false;			return false;		}		// OPN stuff start - optimized		// fix missing nulls and decode blobs automatically		global $ADODB_ANSI_PADDING_OFF;		//$ADODB_ANSI_PADDING_OFF=1;		$rtrim = !empty($ADODB_ANSI_PADDING_OFF);		for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) {			if ($this->_cacheType[$i]=="BLOB") {				if (isset($f[$i])) {					$f[$i] = $this->connection->_BlobDecode($f[$i]);				} else {					$f[$i] = null;				}			} else {				if (!isset($f[$i])) {					$f[$i] = null;				} else if ($rtrim && is_string($f[$i])) {					$f[$i] = rtrim($f[$i]);				}			}		}		// OPN stuff end		$this->fields = $f;		if ($this->fetchMode == ADODB_FETCH_ASSOC) {			$this->fields = &$this->GetRowAssoc(ADODB_ASSOC_CASE);		} else if ($this->fetchMode == ADODB_FETCH_BOTH) {			$this->fields =& array_merge($this->fields,$this->GetRowAssoc(ADODB_ASSOC_CASE));		}		return true;	}	/* Use associative array to get fields array */	function Fields($colname)	{		if ($this->fetchMode & ADODB_FETCH_ASSOC) 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 _close()	{			return @ibase_free_result($this->_queryID);	}	function MetaType($t,$len=-1,$fieldobj=false)	{		if (is_object($t)) {			$fieldobj = $t;			$t = $fieldobj->type;			$len = $fieldobj->max_length;		}		switch (strtoupper($t)) {		case 'CHAR':			return 'C';		case 'TEXT':		case 'VARCHAR':		case 'VARYING':		if ($len <= $this->blobSize) return 'C';			return 'X';		case 'BLOB':			return 'B';		case 'TIMESTAMP':		case 'DATE': return 'D';		case 'TIME': return 'T';				//case 'T': return 'T';				//case 'L': return 'L';		case 'INT':		case 'SHORT':		case 'INTEGER': return 'I';		default: return 'N';		}	}}?>

⌨️ 快捷键说明

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