assets/s2didb.php /// Art: Include /// Inhalt: Elternklasse db /// Beschreibung: Abstraktionsschicht zwischen Objekten und Datanbank /// Benötigt: Die jewieligen Kinder, die Klasse dbms aus mysql.php/sqlite.php /// CCML-Parsing: nein /// ////////////////////////////////////////////////////////////////////////////////////////// /// /// Letzte Änderungen: /// 07.12.2008 Suchfunktion umgestellt /// ////////////////////////////////////////////////////////////////////////////////////////// ///<07.12.2008/6.0.3.5/> if (!defined('SHOP_TO_DATE')) die('Forbidden'); // Klasse Datenbank als Abstraktionslayer class db { var $table; var $result = null; // Konstruktor function db($table) { $this->table = $table; } //////////////////////////////////////////////////////////////////////////// SQL bauen // where Statement zum SQL Befehl hinzufügen function add_where($where) { if (is_scalar($where)) return " WHERE $where "; else if (is_array($where) and count($where)) { foreach ($where as $k => $v) if ($k === 0 || $k === 1 || $k === 2) $w[] = $v; else if ($v === 'not null') $w[] = "$k IS NOT NULL"; else if (isset($v) && $v !== null) $w[] = "$k = '$v'"; else if ($v === null) $w[] = "$k IS NULL"; return " WHERE ".implode(" AND ", $w); } } // order Statement zum SQL Befehl hinzufügen function add_order($order) { if ($order) return " ORDER BY ".implode(", ", $order); } // limit Statement zum SQL Befehl hinzufügen function add_limit($from, $perpage) { if ($perpage) return " LIMIT $from, $perpage"; } //////////////////////////////////////////////////////////////////////////// Datenbank auslesen // Felder auslesen function db_get($fields, $where, $order = null, $page = null, $perpage = null) { if (!$page) $page = 1; if (!$this->is_result()) { if ($perpage) $from = $perpage * ($page - 1); else $from = null; $this->db_select($fields, $where, $order, $from, $perpage); } $object = $this->db_fetch(); if (!$object) $this->db_free(); return $object; } // Zeilen zählen function db_numrows($where = null) { global $dbms; $sql = "SELECT count(*) as count FROM ".TABLE_PREFIX."$this->table "; $sql .= $this->add_where($where); $result = $dbms->sql_query($sql); $count = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); return $count->count; } function db_numrowsjoin($where, $table, $on) { global $dbms; $sql = "SELECT count(*) as count FROM ".TABLE_PREFIX."$this->table t1 JOIN ".TABLE_PREFIX."$table t2 ON t1.$on = t2.$on "; $sql .= $this->add_where($where); $result = $dbms->sql_query($sql); $count = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); return $count->count; } // Auswahl einer Zeile function db_selectone($fields, $where = null, $order = null) { global $dbms; $sql = "SELECT ".implode(', ', $fields)." FROM ".TABLE_PREFIX."$this->table"; $sql .= $this->add_where($where); $sql .= $this->add_order($order); $result = $dbms->sql_query($sql); $object = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); return $object; } // Auswahl mehrerer Zeilen function db_select($fields, $where = null, $order = null, $from = null, $perpage = null) { global $dbms; $sql = "SELECT ".implode(', ', $fields)." FROM ".TABLE_PREFIX."$this->table"; $sql .= $this->add_where($where); $sql .= $this->add_order($order); $sql .= $this->add_limit($from, $perpage); $this->result = $dbms->sql_query($sql); } // Auswahl mehrerer Zeilen mit Tabellenkombination function db_selectjoin($fields, $table, $on, $where = null, $order = null, $from = null, $perpage = null) { global $dbms; $sql = "SELECT ".implode(', ', $fields)." FROM ".TABLE_PREFIX."$this->table t1 JOIN ".TABLE_PREFIX."$table t2 ON t1.$on = t2.$on "; $sql .= $this->add_where($where); $sql .= $this->add_order($order); $sql .= $this->add_limit($from, $perpage); $this->result = $dbms->sql_query($sql); } // Auswahl einer Zeile und Übertrag in eine Objekt function db_selectobject($where) { global $dbms; $sql = "SELECT * FROM ".TABLE_PREFIX."$this->table"; $sql .= $this->add_where($where); $result = $dbms->sql_query($sql); $object = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); if ($object) foreach(get_object_vars($object) as $k => $v) $this->$k = $v; } // Nächste Zeile aus Ergebnis auslesen function db_fetch() { global $dbms; if (!$this->result) die ('No ressoure to fetch'); return $dbms->sql_fetch_row($this->result); } // Ergebnis freilassen function db_free() { global $dbms; $dbms->sql_free_result($this->result); $this->result = null; } function is_result() { return $this->result; } //////////////////////////////////////////////////////////////////////////// Datenbank schreiben // Aktualisieren einer Zeile function db_update($set, $where) { global $dbms; foreach ($set as $k => $v) $s[] = "$k = ".($v == null ? 'null' : "'".$dbms->escape_string($v)."'"); $sql = "UPDATE ".TABLE_PREFIX."$this->table SET ".implode(', ', $s); $sql .= $this->add_where($where); $dbms->sql_query($sql); } // Aktualisierung des gesamten Objekts function db_updateobject($where = null) { global $dbms; foreach($fieldnames = $dbms->sql_get_fieldnames($this->table) as $k) { if ($k != $fieldnames[0]) { if (isset($this->$k) && $this->$k !== null) $s[] = "$k = '".$dbms->escape_string($this->$k)."'"; else if ($this->$k === null) $s[] = "$k = NULL"; } } $sql = "UPDATE ".TABLE_PREFIX."$this->table SET ".implode(', ', $s); if ($where) { $sql .= $this->add_where($where); $sql .= " AND "; } else $sql .= " WHERE "; $primarykey = $fieldnames[0]; $sql .= " $primarykey = '".$this->$primarykey."'"; $dbms->sql_query($sql); } // Einfügen einer Zeile function db_insert($insert_array) { global $dbms; foreach ($insert_array as $k => $v) { $if[] = $k; $iv[] = "'".$dbms->escape_string($v)."'"; } $sql = "INSERT INTO ".TABLE_PREFIX."$this->table (".implode(', ', $if).") VALUES (".implode(', ', $iv).")"; $dbms->sql_query($sql); return $dbms->sql_insert_id(); } // Aktuelles Objekt als Zeile in die Datenbank schreiben function db_insertobject($insert = array()) { global $dbms; foreach($dbms->sql_get_fieldnames($this->table) as $k) { if (isset($this->$k) && $this->$k !== null) { $if[] = $k; $iv[] = "'".$dbms->escape_string($this->$k)."'"; } } foreach ($insert as $k => $v) { $if[] = $k; $iv[] = "'".$dbms->escape_string($v)."'"; } $sql = "INSERT INTO ".TABLE_PREFIX."$this->table (".implode(', ', $if).") VALUES (".implode(', ', $iv).")"; $dbms->sql_query($sql); return $dbms->sql_insert_id(); } //////////////////////////////////////////////////////////////////////////// // Löschen einer Zeile mit kompletten Bedingungen function db_delete($where = null) { global $dbms; $sql = "DELETE FROM ".TABLE_PREFIX."$this->table"; $sql .= $this->add_where($where); $dbms->sql_query($sql); } // Automatisch Change ID generieren function generate_change_id() { global $dbms; $sql = "insert into " . TABLE_PREFIX . "uniqueids values(null)"; $result = $dbms->sql_query($sql); $this->change_id = $dbms->sql_insert_id(); } // Automatisch ID generieren function generate_id() { global $dbms; $sql = "insert into " . TABLE_PREFIX . $this->table . " values(null)"; $result = $dbms->sql_query($sql); return $dbms->sql_insert_id(); } } ?>