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

📄 adodb-postgres64.inc.php

📁 Typo3, 开源里边最强大的
💻 PHP
📖 第 1 页 / 共 3 页
字号:
		$handle = pg_lo_open($this->_connectionID, $oid, 'w');		pg_lo_write($handle, $contents);		pg_lo_close($handle);				// $oid = pg_lo_import ($path); 		pg_exec($this->_connectionID, "commit"); 		$rs = ADOConnection::UpdateBlob($table,$column,$oid,$where,$blobtype); 		$rez = !empty($rs); 		return $rez; 	} 		/*	* Deletes/Unlinks a Blob from the database, otherwise it 	* will be left behind	*	* Returns TRUE on success or FALSE on failure.	*	* contributed by Todd Rogers todd#windfox.net	*/	function BlobDelete( $blob )	{		pg_exec ($this->_connectionID, "begin");		$result = @pg_lo_unlink($blob);		pg_exec ($this->_connectionID, "commit");		return( $result );	}	/*		Hueristic - not guaranteed to work.	*/	function GuessOID($oid)	{		if (strlen($oid)>16) return false;		return is_numeric($oid);	}		/* 	* If an OID is detected, then we use pg_lo_* to open the oid file and read the	* real blob from the db using the oid supplied as a parameter. If you are storing	* blobs using bytea, we autodetect and process it so this function is not needed.	*	* contributed by Mattia Rossi mattia@technologist.com	*	* see http://www.postgresql.org/idocs/index.php?largeobjects.html	*	* Since adodb 4.54, this returns the blob, instead of sending it to stdout. Also	* added maxsize parameter, which defaults to $db->maxblobsize if not defined.	*/ 	function BlobDecode($blob,$maxsize=false,$hastrans=true) 	{		if (!$this->GuessOID($blob)) return $blob;				if ($hastrans) @pg_exec($this->_connectionID,"begin"); 		$fd = @pg_lo_open($this->_connectionID,$blob,"r");		if ($fd === false) {			if ($hastrans) @pg_exec($this->_connectionID,"commit");			return $blob;		}		if (!$maxsize) $maxsize = $this->maxblobsize;		$realblob = @pg_loread($fd,$maxsize); 		@pg_loclose($fd); 		if ($hastrans) @pg_exec($this->_connectionID,"commit"); 		return $realblob;	}		/* 		See http://www.postgresql.org/idocs/index.php?datatype-binary.html	 			NOTE: SQL string literals (input strings) must be preceded with two backslashes 		due to the fact that they must pass through two parsers in the PostgreSQL 		backend.	*/	function BlobEncode($blob)	{		if (ADODB_PHPVER >= 0x5200) return pg_escape_bytea($this->_connectionID, $blob);		if (ADODB_PHPVER >= 0x4200) return pg_escape_bytea($blob);				/*92=backslash, 0=null, 39=single-quote*/		$badch = array(chr(92),chr(0),chr(39)); # \  null  '		$fixch = array('\\\\134','\\\\000','\\\\047');		return adodb_str_replace($badch,$fixch,$blob);				// note that there is a pg_escape_bytea function only for php 4.2.0 or later	}		// assumes bytea for blob, and varchar for clob	function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')	{			if ($blobtype == 'CLOB') {    		return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where");		}		// do not use bind params which uses qstr(), as blobencode() already quotes data		return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where");	}		function OffsetDate($dayFraction,$date=false)	{				if (!$date) $date = $this->sysDate;		else if (strncmp($date,"'",1) == 0) {			$len = strlen($date);			if (10 <= $len && $len <= 12) $date = 'date '.$date;			else $date = 'timestamp '.$date;		}		return "($date+interval'$dayFraction days')";	}		// for schema support, pass in the $table param "$schema.$tabname".	// converts field names to lowercase, $upper is ignored	// see http://phplens.com/lens/lensforum/msgs.php?id=14018 for more info	function &MetaColumns($table,$normalize=true) 	{	global $ADODB_FETCH_MODE;			$schema = false;		$false = false;		$this->_findschema($table,$schema);				if ($normalize) $table = strtolower($table);		$save = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false);				if ($schema) $rs =& $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema));		else $rs =& $this->Execute(sprintf($this->metaColumnsSQL,$table,$table));		if (isset($savem)) $this->SetFetchMode($savem);		$ADODB_FETCH_MODE = $save;				if ($rs === false) {			return $false;		}		if (!empty($this->metaKeySQL)) {			// If we want the primary keys, we have to issue a separate query			// Of course, a modified version of the metaColumnsSQL query using a 			// LEFT JOIN would have been much more elegant, but postgres does 			// not support OUTER JOINS. So here is the clumsy way.						$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;						$rskey = $this->Execute(sprintf($this->metaKeySQL,($table)));			// fetch all result in once for performance.			$keys =& $rskey->GetArray();			if (isset($savem)) $this->SetFetchMode($savem);			$ADODB_FETCH_MODE = $save;						$rskey->Close();			unset($rskey);		}		$rsdefa = array();		if (!empty($this->metaDefaultsSQL)) {			$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;			$sql = sprintf($this->metaDefaultsSQL, ($table));			$rsdef = $this->Execute($sql);			if (isset($savem)) $this->SetFetchMode($savem);			$ADODB_FETCH_MODE = $save;						if ($rsdef) {				while (!$rsdef->EOF) {					$num = $rsdef->fields['num'];					$s = $rsdef->fields['def'];					if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */						$s = substr($s, 1);						$s = substr($s, 0, strlen($s) - 1);					}					$rsdefa[$num] = $s;					$rsdef->MoveNext();				}			} else {				ADOConnection::outp( "==> SQL => " . $sql);			}			unset($rsdef);		}			$retarr = array();		while (!$rs->EOF) { 				$fld = new ADOFieldObject();			$fld->name = $rs->fields[0];			$fld->type = $rs->fields[1];			$fld->max_length = $rs->fields[2];			$fld->attnum = $rs->fields[6];						if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;			if ($fld->max_length <= 0) $fld->max_length = -1;			if ($fld->type == 'numeric') {				$fld->scale = $fld->max_length & 0xFFFF;				$fld->max_length >>= 16;			}			// dannym			// 5 hasdefault; 6 num-of-column			$fld->has_default = ($rs->fields[5] == 't');			if ($fld->has_default) {				$fld->default_value = $rsdefa[$rs->fields[6]];			}			//Freek			$fld->not_null = $rs->fields[4] == 't';									// Freek			if (is_array($keys)) {				foreach($keys as $key) {					if ($fld->name == $key['column_name'] AND $key['primary_key'] == 't') 						$fld->primary_key = true;					if ($fld->name == $key['column_name'] AND $key['unique_key'] == 't') 						$fld->unique = true; // What name is more compatible?				}			}						if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld;				else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld;						$rs->MoveNext();		}		$rs->Close();		if (empty($retarr))			return  $false;		else			return $retarr;				}	  function &MetaIndexes ($table, $primary = FALSE)      {         global $ADODB_FETCH_MODE;                				$schema = false;				$this->_findschema($table,$schema);				if ($schema) { // requires pgsql 7.3+ - pg_namespace used.					$sql = 'SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid	,pg_namespace n WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\')) and c.relnamespace=c2.relnamespace and c.relnamespace=n.oid and n.nspname=\'%s\'';				} else {	                $sql = 'SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns"FROM pg_catalog.pg_class cJOIN pg_catalog.pg_index i ON i.indexrelid=c.oidJOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelidWHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))';    			}				                            if ($primary == FALSE) {                	$sql .= ' AND i.indisprimary=false;';                }                                $save = $ADODB_FETCH_MODE;                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;                if ($this->fetchMode !== FALSE) {                        $savem = $this->SetFetchMode(FALSE);                }                                $rs = $this->Execute(sprintf($sql,$table,$table,$schema));                if (isset($savem)) {                        $this->SetFetchMode($savem);                }                $ADODB_FETCH_MODE = $save;                if (!is_object($rs)) {                	$false = false;					return $false;                }				                $col_names = $this->MetaColumnNames($table,true,true); 				//3rd param is use attnum, 				// see http://sourceforge.net/tracker/index.php?func=detail&aid=1451245&group_id=42718&atid=433976                $indexes = array();                while ($row = $rs->FetchRow()) {                        $columns = array();                        foreach (explode(' ', $row[2]) as $col) {                                $columns[] = $col_names[$col];                        }                                                $indexes[$row[0]] = array(                                'unique' => ($row[1] == 't'),                                'columns' => $columns                        );                }                return $indexes;        }	// returns true or false	//	// examples:	// 	$db->Connect("host=host1 user=user1 password=secret port=4341");	// 	$db->Connect('host1','user1','secret');	function _connect($str,$user='',$pwd='',$db='',$ctype=0)	{				if (!function_exists('pg_connect')) return null;				$this->_errorMsg = false;				if ($user || $pwd || $db) {			$user = adodb_addslashes($user);			$pwd = adodb_addslashes($pwd);			if (strlen($db) == 0) $db = 'template1';			$db = adodb_addslashes($db);		   	if ($str)  {			 	$host = split(":", $str);				if ($host[0]) $str = "host=".adodb_addslashes($host[0]);				else $str = '';				if (isset($host[1])) $str .= " port=$host[1]";				else if (!empty($this->port)) $str .= " port=".$this->port;			}		   		if ($user) $str .= " user=".$user;		   		if ($pwd)  $str .= " password=".$pwd;				if ($db)   $str .= " dbname=".$db;		}		//if ($user) $linea = "user=$user host=$linea password=$pwd dbname=$db port=5432";				if ($ctype === 1) { // persistent			$this->_connectionID = pg_pconnect($str);		} else {			if ($ctype === -1) { // nconnect, we trick pgsql ext by changing the connection str			static $ncnt;							if (empty($ncnt)) $ncnt = 1;				else $ncnt += 1;								$str .= str_repeat(' ',$ncnt);			}			$this->_connectionID = pg_connect($str);		}		if ($this->_connectionID === false) return false;		$this->Execute("set datestyle='ISO'");				$info = $this->ServerInfo();		$this->pgVersion = (float) substr($info['version'],0,3);		if ($this->pgVersion >= 7.1) { // good till version 999			$this->_nestedSQL = true;		}		return true;	}		function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName)	{	 	return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName,-1);	}	 	// returns true or false	//	// examples:	// 	$db->PConnect("host=host1 user=user1 password=secret port=4341");	// 	$db->PConnect('host1','user1','secret');	function _pconnect($str,$user='',$pwd='',$db='')	{

⌨️ 快捷键说明

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