(PHP+Oracle) Класс для работы с Oracle

MikeSam
Дата: 12.10.2006 07:50:53
Посоветуйте класс для работы с Oracle. Можно конечно самому написать, но наверняка готовые есть.
Пчеловод
Дата: 12.10.2006 17:36:49
<?php
if(!defined("__DB__")) {
	define("__DB__", true);

	$dbTNS = "your_base.WORLD";
	$dbUser = "your_user";
	$dbPassword = "your_password";
	$dbFetchflags = OCI_ASSOC + OCI_RETURN_NULLS;

	class DBOracle 
	{
		var $connectionId = false;
		var $tns = false;
		var $user = false;
		var $password = false;
		var $fetchflags = false;

		function DBOracle($tns, $user, $password, $fetchflags) 
		{
			$this->tns = $tns;
			$this->user = $user;
			$this->password = $password;
			$this->fetchflags = $fetchflags;
			$this->connect();
		}

		function connect() 
		{
			$this->connectionId = ocilogon($this->user, $this->password, $this->tns);
			return $this->isConnected();
		}
		
		function getConnection()
		{
			return $this->connectionId;
		}

		function disconnect() 
		{
			if($this->isConnected()) 
			{
				ocilogoff($this->connectionId);
			}
			$this->connectionId = false;
			return $this->isConnected();
		}

		function isConnected() 
		{
			return ($this->connectionId != false);
		}

		function exec($query) 
		{
			if($this->isConnected()) 
			{
				if ( $result = ociparse($this->connectionId, $query) )
				{
					if( !ociexecute($result) ) 
					{
						ocifreecursor($result);
						$result = false;
					}
				}
				else 
				{
					ocifreecursor($result);
					$result = false;
				}
			}
			else 
			{
				$result = false;
			}
			return $result;
		}

		function getFieldCount($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$result = ocinumcols($resultsetId);
			}
			else 
			{
				$result = false;
			}
			return $result;
		}

		function fetch($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$results = array();
				$result = ocifetchinto($resultsetId, $results, $this->fetchflags);
				return $results;
			} 
			else 
			{
				return false;
			}
		}

		function free($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$result = ocifreecursor($resultsetId);
			} 
			else 
			{
				$result = false;
			}
			return $result;
		}
		
		function updateClob($table, $field, $clobdata, $sql)
		{
			$clob = OCINewDescriptor($this->connectionId, OCI_D_LOB);
			$sql = "UPDATE ".$table." SET ".$field."=empty_clob() WHERE ".$sql." RETURNING ".$field." INTO :the_clob";
			if ($result = OCIParse($this->connectionId, $sql) )
			{
				OCIBindByName($result, ':the_clob', &$clob, -1, OCI_B_CLOB); 
				OCIExecute($result, OCI_DEFAULT); 
				if( $clob->save($clobdata) )
				{ 
					return OCICommit($this->connectionId);
				}
				return false;
			}
			else
			{
				return false;
			}
		}


        /**
         * Добавляет кавычки к строке и экранирует спецсимволы
         * @param mixed $in строка
         * @return mixed Либо обработанная строка, либо то, что было на входе.
         */
        function quote($in) {
            if (is_int($in) || is_double($in)) {
                return $in;
            } elseif (is_bool($in)) {
                return $in ? 1 : 0;
            } elseif (is_null($in)) {
                return 'NULL';
            } else {
                return "'" . str_replace("'", "''", $in) . "'";
            }
        } // end quote()


	}

	class DB extends DBOracle {
	
		function DB() 
		{
			global $dbTNS, $dbUser, $dbPassword, $dbFetchflags;
			$this->DBOracle($dbTNS, $dbUser, $dbPassword, $dbFetchflags);
		}
	}
}	
?>
RussianSpy
Дата: 12.10.2006 17:38:26
ADODB
MikeSam
Дата: 13.10.2006 05:48:50
Спасибо.
Relic Hunter
Дата: 13.10.2006 05:55:22
Ууууу как народ на ОСЯХ лабает. Решпект!
Пчеловод
<?php
if(!defined("__DB__")) {
	define("__DB__", true);

	$dbTNS = "your_base.WORLD";
	$dbUser = "your_user";
	$dbPassword = "your_password";
	$dbFetchflags = OCI_ASSOC + OCI_RETURN_NULLS;

	class DBOracle 
	{
		var $connectionId = false;
		var $tns = false;
		var $user = false;
		var $password = false;
		var $fetchflags = false;

		function DBOracle($tns, $user, $password, $fetchflags) 
		{
			$this->tns = $tns;
			$this->user = $user;
			$this->password = $password;
			$this->fetchflags = $fetchflags;
			$this->connect();
		}

		function connect() 
		{
			$this->connectionId = ocilogon($this->user, $this->password, $this->tns);
			return $this->isConnected();
		}
		
		function getConnection()
		{
			return $this->connectionId;
		}

		function disconnect() 
		{
			if($this->isConnected()) 
			{
				ocilogoff($this->connectionId);
			}
			$this->connectionId = false;
			return $this->isConnected();
		}

		function isConnected() 
		{
			return ($this->connectionId != false);
		}

		function exec($query) 
		{
			if($this->isConnected()) 
			{
				if ( $result = ociparse($this->connectionId, $query) )
				{
					if( !ociexecute($result) ) 
					{
						ocifreecursor($result);
						$result = false;
					}
				}
				else 
				{
					ocifreecursor($result);
					$result = false;
				}
			}
			else 
			{
				$result = false;
			}
			return $result;
		}

		function getFieldCount($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$result = ocinumcols($resultsetId);
			}
			else 
			{
				$result = false;
			}
			return $result;
		}

		function fetch($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$results = array();
				$result = ocifetchinto($resultsetId, $results, $this->fetchflags);
				return $results;
			} 
			else 
			{
				return false;
			}
		}

		function free($resultsetId) 
		{
			if($this->isConnected()) 
			{
				$result = ocifreecursor($resultsetId);
			} 
			else 
			{
				$result = false;
			}
			return $result;
		}
		
		function updateClob($table, $field, $clobdata, $sql)
		{
			$clob = OCINewDescriptor($this->connectionId, OCI_D_LOB);
			$sql = "UPDATE ".$table." SET ".$field."=empty_clob() WHERE ".$sql." RETURNING ".$field." INTO :the_clob";
			if ($result = OCIParse($this->connectionId, $sql) )
			{
				OCIBindByName($result, ':the_clob', &$clob, -1, OCI_B_CLOB); 
				OCIExecute($result, OCI_DEFAULT); 
				if( $clob->save($clobdata) )
				{ 
					return OCICommit($this->connectionId);
				}
				return false;
			}
			else
			{
				return false;
			}
		}


        /**
         * Добавляет кавычки к строке и экранирует спецсимволы
         * @param mixed $in строка
         * @return mixed Либо обработанная строка, либо то, что было на входе.
         */
        function quote($in) {
            if (is_int($in) || is_double($in)) {
                return $in;
            } elseif (is_bool($in)) {
                return $in ? 1 : 0;
            } elseif (is_null($in)) {
                return 'NULL';
            } else {
                return "'" . str_replace("'", "''", $in) . "'";
            }
        } // end quote()


	}

	class DB extends DBOracle {
	
		function DB() 
		{
			global $dbTNS, $dbUser, $dbPassword, $dbFetchflags;
			$this->DBOracle($dbTNS, $dbUser, $dbPassword, $dbFetchflags);
		}
	}
}	
?>
murmansk
Дата: 13.10.2006 08:36:59
Пчеловод добавь в класс метод определения bind переменных (OCIBindByName) быстродействие запросов отлич. только условием резко возрастет.
Пчеловод
Дата: 18.10.2006 11:29:08
murmansk
Пчеловод добавь в класс метод определения bind переменных (OCIBindByName) быстродействие запросов отлич. только условием резко возрастет.

Спасибо, сейчас посмотрю...