<?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);
 
        }
 
    }
 
 
?>
 
 |