underbar.png
[phpfspot.git] / phpfspot_db.php
index f8cb53b280469b567539c59bcd41560e5208771a..e0cf39f31a89df601b5352608849228cfdd7ad90 100644 (file)
@@ -2,8 +2,9 @@
 
 /***************************************************************************
  *
- * Copyright (c) by Andreas Unterkircher, unki@netshadow.at
- * All rights reserved
+ * phpfspot, presents your F-Spot photo collection in Web browsers.
+ *
+ * Copyright (c) by Andreas Unterkircher
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *
  ***************************************************************************/
 
-/* from pear "MDB2" package. use "pear install MDB2" if you don't have this! */
-require_once('MDB2.php');
-
+/**
+ * PHPFSPOT_DB class
+ *
+ * @package phpfspot
+ */
 class PHPFSPOT_DB {
 
    private $db;
@@ -31,6 +34,7 @@ class PHPFSPOT_DB {
    private $parent;
    private $is_connected;
    private $last_error;
+   private $last_query;
 
    /**
     * PHPFSPOT_DB class constructor
@@ -39,13 +43,15 @@ class PHPFSPOT_DB {
     */
    public function __construct($parent, $db_path)
    {
-      $this->parent = $parent;
+      global $phpfspot;
+
+      $this->parent = $phpfspot;
       $this->db_path = $db_path;
 
       /* We are starting disconnected */
       $this->setConnStatus(false);
 
-      /* Connect to MySQL Database */
+      /* Connect to database */
       $this->db_connect();
 
    } // __construct()
@@ -64,18 +70,34 @@ class PHPFSPOT_DB {
    /**
     * PHPFSPOT_DB database connect
     *
-    * This function will connect to the database via MDB2
+    * This function will connect to the database
     */
    private function db_connect()
    {
-      if(($this->db = sqlite3_open($this->db_path)) === false) {
+      switch($this->parent->cfg->db_access) {
+         case 'native':
+            if(($this->db = sqlite3_open($this->db_path)) === false) {
+               $this->throwError("Unable to connect to database:" . $this->getLastError());
+               $this->setConnStatus(false);
+            }
+            else {
+               sqlite3_create_function($this->db, 'basename', 1, 'basename');
+               $this->setConnStatus(true);
+            }
+            break;
+         case 'pdo':
+            try {
+               $this->db =  new PDO("sqlite:".$this->db_path);
+               $this->setConnStatus(true);
+            }
+            catch (Exception $e) {
+               $this->throwError("Unable to connect to database:" . $e->getMessage());
+               $this->setConnStatus(false);
+            }
+            break;
 
-         $this->throwError("Unable to connect to database:" . $this->getLastError());
-         $this->setConnStatus(false);
       }
 
-      $this->setConnStatus(true);
-
    } // db_connect()
 
    /**
@@ -85,8 +107,15 @@ class PHPFSPOT_DB {
     */
    private function db_disconnect()
    {
-      if($this->getConnStatus())
-         sqlite3_close($this->db);
+      switch($this->parent->cfg->db_access) {
+         case 'native':
+            if($this->getConnStatus())
+               sqlite3_close($this->db);
+            break;
+         case 'pdo':
+            $this->db = NULL;
+            break;
+      }
 
    } // db_disconnect()
 
@@ -99,9 +128,26 @@ class PHPFSPOT_DB {
    public function db_query($query = "")
    {
       if($this->getConnStatus()) {
+   
+         $this->last_query = $query;
+
+         switch($this->parent->cfg->db_access) {
+            case 'native':
+               if(($result = sqlite3_query($this->db, $query)) === false)
+                  $this->ThrowError($this->getLastError());
+               break;
+            case 'pdo':
+               try{
+                  $result = $this->db->query($query);
+                  return $result;
+               }
+               catch (Exception $e) {
+                  $this->ThrowError($e->getMessage());
+                  $result= NULL;
+               }
+               break;
 
-         if(($result = sqlite3_query($this->db, $query)) === false)
-            $this->ThrowError($this->getLastError());
+         }
        
          return $result;
       }
@@ -119,18 +165,36 @@ class PHPFSPOT_DB {
    {
       if($this->getConnStatus()) {
 
-         if(($result = sqlite3_exec($this->db, $query)) === false)
-            $this->ThrowError($this->getLastError());
-
+         $this->last_query = $query;
+
+         switch($this->parent->cfg->db_access) {
+            case 'native':
+               if(($result = sqlite3_exec($this->db, $query)) === false)
+                  $this->ThrowError($this->getLastError());
+               break;
+            case 'pdo':
+               try {
+                  $result = $this->db->query($query);
+               }
+               catch (Exception $e){
+                  $this->ThrowError($e->getLMessage());
+               }
+               break;
+         }
       }
       else 
          $this->ThrowError("Can't execute query - we are not connected!");
 
    } // db_exec()
 
-   public function db_fetch_object(&$resource)
+   public function db_fetch_object($resource)
    {
-      return sqlite3_fetch_array($resource);
+      switch($this->parent->cfg->db_access) {
+         case 'native':
+            return sqlite3_fetch_array($resource);
+         case 'pdo':
+            return $resource->fetch();
+      }
 
    } // db_fetch_object
 
@@ -145,7 +209,14 @@ class PHPFSPOT_DB {
       if($this->getConnStatus()) {
 
          $result = $this->db_query($query);
-         $row = $result->fetchRow();
+         switch($this->parent->cfg->db_access) {
+            case 'native':
+               $row = $this->db_fetch_object($result);
+               break;
+            case 'pdo':
+               $row = $result->fetch();
+               break;
+         }
          return $row;
       }
       else 
@@ -172,19 +243,6 @@ class PHPFSPOT_DB {
 
    } // db_getNumRows()
 
-   /**
-    * PHPFSPOT_DB get primary key
-    *
-    * This function returns the primary key of the last
-    * operated insert SQL query.
-    */
-   public function db_getid()
-   {
-      /* Get the last primary key ID from execute query */
-      return mysql_insert_id($this->db->connection);
-      
-   } // db_getid()
-
    /**
     * PHPFSPOT_DB check table exists
     *
@@ -198,10 +256,21 @@ class PHPFSPOT_DB {
       if($this->getConnStatus()) {
 
          $result = $this->db_query("SELECT name FROM sqlite_master WHERE type='table'");
-         while($table = $this->db_fetch_object($result)) {
-            if($table['name'] == $table_name)
-               return true;
-         }
+         switch($this->parent->cfg->db_access) {
+            case 'native':
+               while($table = $this->db_fetch_object($result)) {
+                  if($table['name'] == $table_name)
+                     return true;
+               }
+               break;
+            case 'pdo':
+               foreach($result as $table ){
+                  if($table['NAME'] == $table_name)
+                     return true;
+               }
+               break;
+          }
+
          return false;
       }
       else
@@ -240,6 +309,7 @@ class PHPFSPOT_DB {
    private function ThrowError($string)
    {
       if(!defined('DB_NOERROR'))  {
+         print "Error during query: ". $this->last_query ."<br /><br />\n";
          print "<br /><br />". $string ."<br /><br />\n";
          try {
             throw new Exception;
@@ -254,7 +324,12 @@ class PHPFSPOT_DB {
 
    private function getLastError()
    {
-      return sqlite3_error($this->db);
+      switch($this->parent->cfg->db_access) {
+         case 'native':
+            return sqlite3_error($this->db);
+         case 'pdo':
+            return "". $this->db->errorInfo();
+      }
 
    } // getLastError()