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

📄 adodb-ibase.inc.php

📁 PhpWiki是sourceforge的一个开源项目
💻 PHP
📖 第 1 页 / 共 2 页
字号:
			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 ($isInterbase6) {				    $fld->type = 'timestamp';				} else {					$fld->type = 'date';				}				break;			case 12:			case 13:				$fld->type = 'date';				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;				if ($this->metaColumnsSQL) {					$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) return false;			$retarr = array();			//OPN STUFF start			$isInterbase6 = ($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], $isInterbase6);				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 $retarr;			}		return false;	}		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;			return $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);			 $fld->name = strtolower($ibf['alias']);			 if (empty($fld->name)) $fld->name = strtolower($ibf['name']);			 $fld->type = $ibf['type'];			 $fld->max_length = $ibf['length'];			 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 '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 + -