$var = trim ($match[2][$i]); } //Datenbank-Typ prüfen $this->DB_TYPE = strtoupper ($this->DB_TYPE); $this->ConnectToDatabase (); } /***** Baut Verbindung zur Datenbank auf *****/ function ConnectToDatabase () { switch ($this->DB_TYPE) { case "MYSQL": $this->DB_HANDLE = @mysql_pconnect ($this->DB_HOST, $this->DB_USER, $this->DB_PASS); $mysql_select_db = @mysql_select_db ($this->DB_BASE, $this->DB_HANDLE); break; case "PGSQL": $strCon = $this->GenConnectionStringPG (); $this->DB_HANDLE = @pg_connect ($strCon); break; } //evtl. Fehlermeldungen if (!$this->DB_HANDLE) die ("Wegen Wartungsarbeiten ist die Webseite vorübergehend nicht erreichbar."); if ($this->DB_TYPE == "MYSQL" && !$mysql_select_db) die ("Fehler beim Verbinden mit Datenbank"); } function CloseDB () { switch ($this->DB_TYPE) { case "MYSQL": //@mysql_close ($this->DB_HANDLE); breaK; case "PGSQL": @pg_close ($this->DB_HANDLE); break; } } /***** Sendet Abfrage-String und gibt Ergebnis zurück; speichert ggf. Fehler *****/ function Query ($strSQL) { $this->SQLCACHE = $strSQL; if ($this->DEBUG) { print "$strSQL
"; return true; } //$strSQL = addslashes ($strSQL); switch ($this->DB_TYPE) { case "MYSQL": $query = @mysql_query ($strSQL, $this->DB_HANDLE); if (!$query) $this->DB_LastError = @mysql_error ($this->DB_HANDLE); $this->DB_ResultError = @mysql_error ($this->DB_HANDLE); break; case "PGSQL": @pg_send_query ($this->DB_HANDLE, $strSQL); $query = @pg_get_result ($this->DB_HANDLE); $this->DB_ResultError = pg_result_error ($query); $this->DB_LastError = pg_last_error ($this->DB_HANDLE); $this->DB_LastNotice = pg_last_notice ($this->DB_HANDLE); break; case "OPGSQL": @pg_send_query ($this->DB_HANDLE, $strSQL); $query = @pg_get_result ($this->DB_HANDLE); $this->DB_ResultError = pg_result_error ($query); $this->DB_LastError = pg_last_error ($this->DB_HANDLE); $this->DB_LastNotice = pg_last_notice ($this->DB_HANDLE); break; } return $query; } function VarCheck (&$Source, &$Check) { $data_keys = array_keys ($Source); $check_keys = array_keys ($Check); $delete = array_diff ($data_keys , $check_keys); $add = array_diff ($check_keys, $data_keys ); // unnötige Felder entfernen foreach ($delete as $a) { unset ($Source[$a]); } // fehlende Felder ergänzen foreach ($add as $a) { $Source[$a] = $Check[$a]; } // Trimmen foreach ($Source as $key => $value) { $Source[$key] = trim ($value); } } /***** Führt INSERT anhand eines Arrays aus *****/ function Insert_Array ($table, $assocArray, $VarCheck = false) { /* print "ARRAY:"; print_r($assocArray); exit; */ // Array-Elemente prüfen if (is_array ($VarCheck)) { $this->VarCheck ($assocArray, $VarCheck); } $sql = "INSERT INTO $table "; $fields = "("; $values = "("; foreach ($assocArray as $key => $value) { $fields .= $key . ", "; $values .= "'" . addslashes ($value) . "', "; } $this->CutChars ($fields, 2); $this->CutChars ($values, 2); $sql .= $fields . ") VALUES " . $values . ")"; /* print "INSERT: $sql
"; exit; */ $query = $this->Query ($sql); return $query; } /***** Führt UPDATE anhand eines Arrays aus *****/ function Update_Array ($table, $assocArray, $where, $VarCheck = false) { // Array-Elemente prüfen if (is_array ($VarCheck)) { $this->VarCheck ($assocArray, $VarCheck); } $sql = "UPDATE $table SET "; foreach ($assocArray as $key => $value) $sql .= $key . " = '" . addslashes ($value) . "', "; $this->CutChars ($sql, 2); $sql .= " WHERE $where"; /* print "UPDATE: $sql
"; exit; */ $query = $this->Query ($sql); return $query; } /***** Führt DELETE aus, mehrer Datensätze per Array *****/ function Delete_Row ($table, $where) { if (!is_array ($where)) $where = array ($where); foreach ($where as $delrow) { $sql = "DELETE FROM $table WHERE $delrow"; $this->Query ($sql); } } /***** Gibt das komplette Ergebnis als ass. Array zurück *****/ function Fetch_All ($strQuery) { $query = $this->Query ($strQuery); $resAll = array (); switch ($this->DB_TYPE) { case "MYSQL": while ($data = @mysql_fetch_assoc ($query)) $resAll[] = $data; break; case "PGSQL": while ($data = @pg_fetch_assoc ($query)) $resAll[] = $data; break; case "OPGSQL": $rows = @pg_numrows ($query); for ($i = 0; $i < $rows; $i++) $resAll[] = @pg_fetch_array ($query, $i, PGSQL_ASSOC); break; } return $resAll; } function Fetch_Column ($strQuery, $ColumnKey) { $query = $this->Query ($strQuery); $result = array (); switch ($this->DB_TYPE) { case "MYSQL": break; case "PGSQL": $rows = pg_numrows ($query); for ($i = 0; $i < $rows; $i++) { $result[] = pg_result ($query, $i, $ColumnKey); } break; case "OPGSQL": break; } return $result; } function Fetch_KeyList ($strQuery, $ColumnKey) { $query = $this->Query ($strQuery); $result = array (); switch ($this->DB_TYPE) { case "MYSQL": break; case "PGSQL": while ($data = @pg_fetch_assoc ($query)) { $result[$data[$ColumnKey]] = $data; } break; case "OPGSQL": break; } return $result; } /***** Gibt einen Datensatz als indiziertes Array zurück *****/ function Fetch_Row ($strQuery, $row = 0) { $query = $this->Query ($strQuery); if (!$query) return false; switch ($this->DB_TYPE) { case "MYSQL": $row = @mysql_fetch_row ($query); break; case "PGSQL": $row = @pg_fetch_row ($query, $row); break; case "OPGSQL": $row = @pg_fetch_array ($query, $row, PGSQL_NUM); break; } return $row; } /***** Gibt einen Datensatz als ass. Array zurück *****/ function Fetch_Assoc ($strQuery, $row = 0) { $query = $this->Query ($strQuery); switch ($this->DB_TYPE) { case "MYSQL": $row = @mysql_fetch_assoc ($query); break; case "PGSQL": $row = @pg_fetch_assoc ($query, $row); break; case "OPGSQL": $row = @pg_fetch_array ($query, $row, PGSQL_ASSOC); break; } return $row; } /***** Gibt Anzahl Datensätze (TableRows) zurück *****/ function GetRows ($strSQL) { $query = $this->Query ($strSQL); switch ($this->DB_TYPE) { case "MYSQL": $rows = @mysql_num_rows ($query); break; case "PGSQL": $rows = @pg_num_rows ($query); break; case "OPGSQL": $rows = @pg_numrows ($query); break; } return $rows; } function Result ($sql, $field) { $query = $this->Query ($sql); if (!$query) return false; switch ($this->DB_TYPE) { case "MYSQL": $result = @mysql_result ($query, 0, $field); break; case "PGSQL": $result = @pg_fetch_result ($query, 0, $field); break; case "OPGSQL": $result = @pg_result ($query, 0, $field); break; } return $result; } /***** gibt true zurück, wenn Ergebnis mindestens eine Zeile *****/ function isResult ($sql) { $query = $this->Query ($sql); if (!$query) return false; switch ($this->DB_TYPE) { case "MYSQL": $rows = @mysql_num_rows ($query); break; case "PGSQL": $rows = @pg_num_rows ($query); break; case "OPGSQL": $rows = @pg_numrows ($query); break; } if ($rows > 0) return true; else return false; } /***** Oeffnet eine SQL-Datei und fuehrt sie aus *****/ function ExecuteFile ($FileName) { //Datei oeffnen $fp = fopen ($FileName, "r"); if (!$fp) return false; $strSQL = fread ($fp, filesize ($FileName)); //Kommentare entfernen $strSQL = preg_replace ("/--.*?\n/" , "", $strSQL); $strSQL = preg_replace ("/\/\*.*?\*\//s", "", $strSQL); preg_match_all ("/.*?;/s", $strSQL, $match ); foreach ( $match[0] as $sql ) { $query = mysql_query ($sql, $this->DB_HANDLE); if ( !$query ) return false; } return true; } /***** Gibt die ID des letzten Inserts zurück (nur MySQL) *****/ function GetLastInsertID () { return @mysql_insert_id ($this->DB_HANDLE); } ############# HILFSFUNKTIONEN ############# function GenConnectionStringPG () { $strCon = ""; if ($this->DB_HOST != "") $strCon .= " host=" . $this->DB_HOST; if ($this->DB_USER != "") $strCon .= " user=" . $this->DB_USER; if ($this->DB_BASE != "") $strCon .= " dbname=" . $this->DB_BASE; if ($this->DB_PORT != "") $strCon .= " port=" . $this->DB_PORT; if ($this->DB_PASS != "") $strCon .= " password=" . $this->DB_PASS; return $strCon; } function CutChars (&$str, $count) { $str = substr ($str, 0, strlen ($str) - $count); } /*** END OF CLASS ***/ /* switch ($this->DB_HANDLE) { case "MYSQL": break; case "PGSQL": break; case "OPGSQL": break; } */ }