X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot_db.php;h=90fdb8cc17392088a0d83763b7508b940dc764ce;hp=f8cb53b280469b567539c59bcd41560e5208771a;hb=b583a04ebad60d02349b78f8c38353e0cb3eb9ea;hpb=6e2d319e3b4fb0aac55413bbcc121669a19e3720 diff --git a/phpfspot_db.php b/phpfspot_db.php index f8cb53b..90fdb8c 100644 --- a/phpfspot_db.php +++ b/phpfspot_db.php @@ -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 @@ -21,9 +22,10 @@ * ***************************************************************************/ -/* 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 +33,7 @@ class PHPFSPOT_DB { private $parent; private $is_connected; private $last_error; + private $last_query; /** * PHPFSPOT_DB class constructor @@ -39,13 +42,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 +69,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 +106,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 +127,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 +164,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 +208,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 +242,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 +255,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 +308,7 @@ class PHPFSPOT_DB { private function ThrowError($string) { if(!defined('DB_NOERROR')) { + print "Error during query: ". $this->last_query ."

\n"; print "

". $string ."

\n"; try { throw new Exception; @@ -254,7 +323,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()