| 
<?php
/*******************************************************************************************
 *           Author    : Yuriy Rusinov                                                     *
 *           Contact   : [email protected]                                          *
 *           Copyright : free for non-commercial use.                                      *
 *******************************************************************************************/
 
 class PostgreDB
 {
 var $host;
 var $username;
 var $password;
 var $port;
 var $dbname;
 var $error = null;
 var $dbconnect;
 var $query;
 var $result;
 var $oid = null;
 var $oid_res;
 var $persistent;
 
 function PostgreDB ($DB="", $Host="localhost", $PgPort=5432, $User="Anonymous", $pass="Anonymous", $persist=0)
 {
 $this->host=$Host;
 $this->dbname=$DB;
 $this->username=$User;
 $this->password=$pass;
 $this->port=$PgPort;
 $this->persistent=$persist;
 $this->Connect();
 }
 
 function Connect ()
 {
 $connect="host=".$this->host." port=".$this->port." dbname=".$this->dbname." user=".$this->username;
 if (!empty($this->password))
 $connect.=" password=".$this->password;
 if ($this->persistent)
 $this->dbconnect=pg_pconnect ($connect);
 else
 $this->dbconnect=pg_connect ($connect);
 if (!$this->dbconnect)
 $this->error="cannot connect to database ".$this->dbname;
 }
 
 function ExecQuery ($sql)
 {
 $this->query=new Query ($sql, $this->dbconnect);
 $this->result=$this->query->Execute();
 $this->error=$this->query->Error();
 //            $this->query->Free();
 return $this->result;
 }
 
 function FetchResult (&$row, $assoc=PGSQL_BOTH)
 {
 if (!$this->error)
 {
 @$arr=pg_fetch_array ($this->result, $row, $assoc);
 return $arr;
 }
 else
 {
 echo "An error occured, $this->error";
 return null;
 }
 }
 
 function NumRows ()
 {
 if ($this->result && !$this->error)
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 return pg_num_rows ($this->result);
 else
 return pg_numrows ($this->result);
 else
 return -1;
 }
 
 function Error ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->error=pg_last_error ($this->dbconnect);
 return $this->error;
 }
 
 function Begin ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 {
 pg_query ($this->dbconnect, "begin");
 $this->oid=pg_lo_create ($this->dbconnect);
 }
 else
 {
 pg_exec ($this->dbconnect, "begin");
 $this->oid=pg_locreate ($this->dbconnect);
 }
 $this->result=$this->Open();
 $this->oid_res=$this->result;
 }
 
 function Create ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->oid=pg_lo_create ($this->dbconnect);
 else
 $this->oid=pg_locreate ($this->dbconnect);
 }
 
 function Open ($mode="rw")
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->result=pg_lo_open($this->dbconnect, $this->oid, $mode);
 else
 $this->result=pg_loopen($this->dbconnect, $this->oid, $mode);
 return $this->result;
 }
 
 function Write ($data)
 {
 if (!$this->oid || $this->error)
 echo "$this->error<br>\n";
 else
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->error=pg_lo_write ($this->result, $data);
 else
 $this->error=pg_lowrite ($this->result, $data);
 }
 
 function Read ()
 {
 if (!$this->oid)
 echo "$this->error<br>\n";
 else
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->result=pg_lo_read_all ($this->result, $data);
 else
 $this->result=pg_loreadall ($this->result, $data);
 return $this->result;
 }
 
 function Unlink ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 pg_lo_unlink ($this->dbconnect, $this->oid);
 }
 
 function LastOID ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 $this->oid=pg_last_oid ($this->result);
 return $this->oid;
 }
 
 function Close ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 {
 if (!$this->oid)
 echo "$this->error<br>\n";
 else
 {
 $this->result=pg_result_status ($this->result);
 $this->error=pg_lo_close ($this->oid);
 }
 }
 }
 
 function Options () { return pg_options ($this->dbconnect); }
 
 function Status ()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 return pg_connection_status ($this->dbconnect);
 }
 
 function RollBack ()
 {
 if (!$this->oid)
 echo "$this->error<br>\n";
 else
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 pg_query ($this->dbconnect, "Rollback");
 else
 pg_exec ($this->dbconnect, "Rollback");
 }
 
 function Commit ()
 {
 if (!$this->oid)
 echo "$this->error<br>\n";
 else
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 pg_query ($this->dbconnect, "Commit");
 else
 pg_exec ($this->dbconnect, "Commit");
 }
 
 function DBClose()
 {
 if (!$this->persistent)
 pg_close($this->dbconnect);
 }
 }
 
 class Query
 {
 var $sql;
 var $result;
 var $field;
 var $dbconnection;
 var $error;
 
 function Query ($sql_q, $dbc )
 {
 $this->sql=$sql_q;
 $this->dbconnection=$dbc;
 }
 
 function Execute()
 {
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 {
 $this->result=pg_query ($this->dbconnection, $this->sql);
 $this->error=pg_result_error ($this->result);
 }
 else
 $this->result=pg_exec ($this->dbconnection, $this->sql);
 return $this->result;
 }
 
 function Error()
 {
 return $this->error;
 }
 
 function Field($num=0)
 {
 if ($this->result)
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 return pg_field_name ($this->result, $num);
 else
 return pg_fieldname ($this->result, $num);
 else
 return 0;
 }
 
 function Rows ()
 {
 if ($this->result)
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 return pg_num_rows ($this->result);
 else
 return pg_numrows ($this->result);
 else
 return 0;
 }
 
 function Fetch(&$row, $assoc=PGSQL_BOTH)
 {
 if ($this->result)
 $arr=pg_fetch_array ($this->result, $row, $assoc);
 else
 $arr=0;
 return $arr;
 }
 
 function Free()
 {
 if ($this->result)
 if (version_compare(phpversion(), "4.2.0", "ge")>0)
 pg_free_result ($this->result);
 else
 pg_freeresult ($this->result);
 }
 }
 
 ?>
 |