Version: 1.0

Type: Class

Category: Databases

License: GNU General Public License

Description: Easy way to access database and store fetched results. Database connection and query operation implemented in a separate class to play with multiple query results simultaneously over the same connection.



              <?php 
              /* 
              ##   Simple PostgreSQL Abstraction Layer v1.0 
              ##   by Cem EVK <cemc@linux.org.tr> 
              ##   Sturday, January 06, 2001 
              ## 
              ##   Easy way to access database and store fetched results. 
              ##   Database connection and query operation implemented in a separate 
              ##   class to play with multiple query results simultaneously over 
              ##   the same connection. 
              ## 
              ##   You can implement your own abstraction layer for other DBMSes that 
              ##   PHP supports. 
              ## 
              ##   If you find a way/idea to run this software better, 
              ##   please send it to author. 
              ##   Tanks to my colleagues. 
              ## 
              ##   Usage : 
              ##          $DB = new PGDB (); 
              ##          $sql = new QUERY ($DB); 
              ##          $sql->execute ("select name, surname, email from users where " . 
              ##                "username = '$username'"); 
              ##          if ($sql->getntuples () == 0) { 
              ##                 echo "No records found !"; 
              ##                 $DB->close (); 
              ##                 exit; 
              ##          } 
              ##          $record = $sql->gofirst (); 
              ##          $name = $record['name']; 
              ##          echo "Realname of ($username) : " . $name; 
              ##          $DB->close (); 
              */ 

              $DBNAME       = "database_name"; 
              $DBUSER        = "database_user"; 
              $DBPASSWD  = "database_user_password"; 
              $DBHOST       = "database_host"; 
              $DBPORT       = "database_port"; 

              class Abstract_DB 
              { 

              ##PRIVATE## 

                      var $db_linkid = 0; 

              ##PUBLIC## 

                      function open ($dbname, $user, $pass, $host, $port) 
                      { 
                      } 

                      function close () 
                      { 
                      } 
              } 

              class PGDB extends Abstract_DB 
              { 

                      function PGDB() 
                      { 
                              global $DBNAME; 
                              global $DBUSER; 
                              global $DBPASSWD; 
                              global $DBHOST; 
                              global $DBPORT; 

                              $this->open ($DBNAME, $DBUSER, $DBPASSWD, $DBHOST, $DBPORT); 
                      } 

                      function _PGDB() 
                      { 
                              $this->close(); 
                      } 

                      function open ($dbname, $user, $passwd, $host, $port) 
                      { 
                              $this->db_linkid = pg_connect("dbname=$dbname " . 
                                              "user=$user password=$passwd port=$port"); 
                              return $this->db_linkid; 
                      } 

                      function close () 
                      { 
                              return pg_close ($this->db_linkid); 
                      } 


              } 

              class QUERY 
              { 

              ##PRIVATE## 
                      var $dbobject; 
                      var $ntuples; 
                      var $operationresult; 
                      var $resultset; 
                      var $currentrow = 0; 

              ##PUBLIC## 

                      function QUERY ($pdbobject) 
                      { 
                              if ($pdbobject) 
                                      $this->associate ($pdbobject); 
                      } 

                       function associate ($pdbobject) 
                      { 
                              $this->dbobject = $pdbobject; 
                      } 

                      function execute ($querystring) 
                      { 
                              $this->operationresult = pg_exec ($this->dbobject->db_linkid, 
                                              $querystring); 
                              return $this->operationresult; 
                      } 

                      function getntuples () 
                      { 
                              $this->ntuples = pg_numrows ($this->operationresult); 
                              return $this->ntuples; 
                      } 

                      function getfieldname ($fieldnumber) 
                      { 
                              return pg_fieldname ($this->operationresult, $fieldnumber); 
                      } 

                      function readrow () 
                      { 
                              $this->resultset = pg_fetch_array ($this->operationresult, 
                                              $this->currentrow); 
                              return ($this->currentresultset = $this->resultset); 
                      } 

                      function gofirst () 
                      { 
                              $this->currentrow = 0; 
                              return $this->readrow (); 
                      } 

                      function golast () 
                      { 
                              $this->currentrow = ($this->getntuples ()) - 1; 
                              return $this->readrow (); 
                      } 

                      function gonext () 
                      { 
                              $this->currentrow++; 
                              if ($this->currentrow < $this->getntuples ()) { 
                                      $this->resultset = $this->readrow (); 
                                      return $this->resultset; 
                              } 
                              else 
                                      return "LAST_RECORD_REACHED"; 
                      } 

                      function goprevious () 
                      { 
                              $this->currentrow--; 
                              if ($this->currentrow >= 0) { 
                                      $this->resultset = $this->readrow (); 
                                      return $this->resultset; 
                              } 
                              else 
                                      return "FIRST_RECORD_REACHED"; 
                      } 

                      function beginTransaction () 
                      { 
                              if (!$this->execute ("BEGIN")) 
                                      return false; 
                              return true; 
                      } 

                      function commitTransaction () 
                      { 
                              if (!$this->execute ("COMMIT")) 
                                      return false; 
                              return true; 
                      } 

                      function rollbackTransaction () 
                      { 
                              if (!$this->execute ("ROLLBACK")) 
                                      return false; 
                              return true; 
                      } 

              } 
              ?>