nveid
2011-12-07 f5b0ca26b34388a108f8fe1c77f3ef1c99829bfa
Converted all mysql_ calls to OO based mysqli calls.
Also removed the calls to the db closeConn calls in favor of
destryong the connections on the class __destruct() 's..

Since firebird db had a closeConn as well, changed its __destruct
to calls its own personal closeConn which otherwise left unmodified.

Refs: 1722
5 files modified
635 ■■■■ changed files
interface/lib/app.inc.php 1 ●●●● patch | view | raw | blame | history
interface/lib/classes/db_firebird.inc.php 5 ●●●● patch | view | raw | blame | history
interface/lib/classes/db_mysql.inc.php 423 ●●●● patch | view | raw | blame | history
server/lib/app.inc.php 10 ●●●●● patch | view | raw | blame | history
server/lib/classes/db_mysql.inc.php 196 ●●●●● patch | view | raw | blame | history
interface/lib/app.inc.php
old mode 100644 new mode 100755
@@ -78,7 +78,6 @@
    
    public function __destruct() {
        session_write_close();
        if(isset($this->db)) $this->db->closeConn();
    }
    public function uses($classes) {
interface/lib/classes/db_firebird.inc.php
@@ -45,7 +45,7 @@
    var $transID;
    // constructor
    function db()
    function __construct()
    {
        
        global $conf;
@@ -55,6 +55,9 @@
        $this->dbPass = $conf["db_password"];
        $this->connect();
    }
    function __destruct() {
        $this->closeConn();
        }
    // error handler
    function updateError($location)
interface/lib/classes/db_mysql.inc.php
@@ -1,6 +1,7 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
   Copyright (c) 2005, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -27,26 +28,27 @@
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class db {
class db extends mysqli
{
    private $dbHost = '';           // hostname of the MySQL server
    private $dbName = '';           // logical database name on that server
    private $dbUser = '';           // database authorized user
    private $dbPass = '';           // user's password
    private $dbCharset = '';       // what charset comes and goes to mysql: utf8 / latin1
  private $dbCharset = 'utf8';// Database charset
    private $dbNewLink = false;    // Return a new linkID when connect is called again
    private $dbClientFlags = 0;    // MySQL Client falgs
    private $linkId = 0;           // last result of mysql_connect()
    private $queryId = 0;           // last result of mysql_query()
  private $linkId = 0;        // last result of mysqli_connect()
  private $queryId = 0;        // last result of mysqli_query()
    private $record    = array();       // last record fetched
    private $autoCommit = 1;        // Autocommit Transactions
    private $currentRow;           // current row number
    private $errorNumber = 0;       // last error number
    public $errorMessage = '';       // last error message
    private $errorLocation = '';   // last error location
    public $show_error_messages = false;
  public $show_error_messages = true; // false in server, true in interface
    public function __construct()
    {
  // constructor
  public function __construct() {
        global $conf;
        $this->dbHost = $conf['db_host'];
        $this->dbName = $conf['db_database'];
@@ -55,46 +57,47 @@
        $this->dbCharset = $conf['db_charset'];
        $this->dbNewLink = $conf['db_new_link'];
        $this->dbClientFlags = $conf['db_client_flags'];
        //$this->connect();
    parent::__construct($conf['db_host'], $conf['db_user'],$conf['db_password'],$conf['db_database']);
    if ($this->connect_error) {
      $this->updateError('DB::__construct');
      return false;
    }
    parent::query( 'SET NAMES '.$this->dbCharset);
    parent::query( "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
    }
    /**  Error handler */
    public function updateError($location)
    {
        $this->errorNumber = mysql_errno();
        $this->errorMessage = mysql_error();
  public function __destruct() {
    $this->close(); // helps avoid memory leaks, and persitent connections that don't go away.
  }
  // error handler
  public function updateError($location) {
    global $app;
    if($this->connect_error) {
      $this->errorNumber = $this->connect_errno;
      $this->errorMessage = $this->connect_error;
    } else {
      $this->errorNumber = $this->errno;
      $this->errorMessage = $this->error;
    }
        $this->errorLocation = $location;
        if($this->errorNumber && $this->show_error_messages){
            echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
            flush();
    if($this->errorNumber) {
      $error_msg = $this->errorLocation .' '. $this->errorMessage;
      // This right here will allow us to use the samefile for server & interface
      if($this->show_error_messages) {
    echo $error_msg;
      } else if(method_exists($app, 'log')) {
    $app->log($error_msg, LOGLEVEL_WARN);
      }
        }
    }
    public function connect()
    {
        if($this->linkId == 0){
            $this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbNewLink, $this->dbClientFlags);
            if(!$this->linkId){
                $this->updateError('DB::connect()<br />mysql_connect');
                return false;
            }
            $this->queryId = @mysql_query('SET NAMES '.$this->dbCharset, $this->linkId);
            $this->queryId = @mysql_query("SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'", $this->linkId);
        }
        return true;
    }
    public function query($queryString)
    {
        if(!$this->connect()){
            return false;
        }
        if(!mysql_select_db($this->dbName, $this->linkId)){
            $this->updateError('DB::connect()<br />mysql_select_db');
            return false;
        }
        $this->queryId = @mysql_query($queryString, $this->linkId);
        $this->updateError('DB::query('.$queryString.')<br />mysql_query');
  public function query($queryString) {
    $this->queryId = parent::query($queryString);
    $this->updateError('DB::query('.$queryString.') -> mysqli_query');
        if(!$this->queryId){
            return false;
        }
@@ -102,81 +105,65 @@
        return $this->queryId;
    }
    /** Returns all records as an array */
    public function queryAllRecords($queryString)
  // returns all records in an array
  public function queryAllRecords($queryString) {
    if(!$this->query($queryString))
    {
        if(!$this->query($queryString)){
            return false;
        }
        $ret = array();
        while($line = $this->nextRecord()){
    while($line = $this->nextRecord())
    {
            $ret[] = $line;
        }
        return $ret;
    }
    /** Returns one row as an array */
    public function queryOneRecord($queryString)
  // returns one record in an array
  public function queryOneRecord($queryString) {
    if(!$this->query($queryString) || $this->numRows() == 0)
    {
        if(!$this->query($queryString) || $this->numRows() == 0){
            return false;
        }
        return $this->nextRecord();
    }
    /** Returns the next record as an array */
    public function nextRecord()
  // returns the next record in an array
  public function nextRecord() {
    $this->record = $this->queryId->fetch_assoc();
    $this->updateError('DB::nextRecord()-> mysql_fetch_array');
    if(!$this->record || !is_array($this->record))
    {
    $this->record = mysql_fetch_assoc($this->queryId);
        $this->updateError('DB::nextRecord()<br />mysql_fetch_array');
        if(!$this->record || !is_array($this->record)){
            return false;
        }
        $this->currentRow++;
        return $this->record;
    }
    /** Returns the number of rows returned by the last select query */
    public function numRows()
    {
        return mysql_num_rows($this->queryId);
  // returns number of rows returned by the last select query
  public function numRows() {
    return $this->queryId->num_rows;
    }
    public function affectedRows()
    {
        return mysql_affected_rows($this->linkId);
  // returns mySQL insert id
  public function insertID() {
    return $this->insert_id;
    }
        
    /** Returns the last mySQL insert_id() */
    public function insertID()
    {
        return mysql_insert_id($this->linkId);
  // Check der variablen
  // Really.. using quote should be phased out in favor of using bind_param's.  Though, for legacy code..
  // here's the equivalent
  public function quote($formfield) {
    return $this->escape_string($formfield);
    }
        
    /** Checks a variable - Depreciated, use quote() */
    public function check($formfield)
    {
        return $this->quote($formfield);
    }
    /** Escapes quotes in variable. mysql_real_escape_string() */
    public function quote($formfield)
    {
        if(!$this->connect()){
            $this->updateError('WARNING: mysql_connect: Used addslashes instead of mysql_real_escape_string');
            return addslashes($formfield);
        }
        return mysql_real_escape_string($formfield, $this->linkId);
    }
    /** Unquotes a variable, strip_slashes() */
    public function unquote($formfield)
    {
  // Check der variablen
  public function unquote($formfield) {
        return stripslashes($formfield);
    }
        
    public function toLower($record)
    {
public function toLower($record) {
        if(is_array($record)){
            foreach($record as $key => $val) {
                $key = strtolower($key);
@@ -186,37 +173,40 @@
        return $out;
    }
       
    // deprecated
    /*
    public function insert($tablename, $form, $debug = 0)
  //* These functions are deprecated and will be removed.
  function insert($tablename,$form,$debug = 0)
    {
        if(is_array($form)){
            foreach($form as $key => $value){
  foreach($form as $key => $value)
  {
                $sql_key .= "$key, ";
                $sql_value .= "'".$this->check($value)."', ";
            }
            $sql_key = substr($sql_key,0,strlen($sql_key) - 2);
            $sql_value = substr($sql_value,0,strlen($sql_value) - 2);
            $sql = "INSERT INTO $tablename (".$sql_key.') VALUES ('.$sql_value.')';
            //TODO: where has $debug come from !???
            if($debug == 1){ echo "SQL-Statement: $sql<br><br>"; }
  $sql = "INSERT INTO $tablename (" . $sql_key . ") VALUES (" . $sql_value .")";
  if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
            $this->query($sql);
            if($debug == 1){ echo 'mySQL Error Message: '.$this->errorMessage; }
  if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
        }
    }
    
    // Deprecated
    public function update($tablename, $form, $bedingung, $debug = 0)
  function update($tablename,$form,$bedingung,$debug = 0)
    {
        if(is_array($form)){
            foreach($form as $key => $value){
  foreach($form as $key => $value)
  {
                $insql .= "$key = '".$this->check($value)."', ";
            }
            $insql = substr($insql, 0, strlen($insql) - 2);
            $sql = "UPDATE $tablename SET " . $insql . " WHERE $bedingung";
            if($debug == 1){ echo "SQL-Statement: $sql<br><br>"; }
  if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
            $this->query($sql);
            if($debug == 1){ echo 'mySQL Error Message: '.$this->errorMessage; }
  if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
        }
    }
    */
@@ -332,83 +322,59 @@
    }
    public function closeConn()
    {
        if($this->linkId)
        {
            mysql_close($this->linkId);
            return true;
        } else { return false; }
    }
    public function freeResult($query) 
    {
        if(mysql_free_result($query))
        {
      if(is_object($query) && (get_class($query) == "mysqli_result")) {
    $query->free();
            return true;
        } else {
            return false;
        }
    }
    
    /*
    public function delete()
    {
    }
    */
    /* TODO: Does anything use this? */
    public function delete() {
    
    /*
    public function Transaction($action)
    {
    }
    /* TODO: Does anything use this? */
    public function Transaction($action) {
        //action = begin, commit oder rollback
    }
    /*
       $columns = array(action =>   add | alter | drop
       name =>     Spaltenname
       name_new => neuer Spaltenname, nur bei 'alter' belegt
       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
       typeValue => Wert z.B. bei Varchar
       defaultValue =>  Default Wert
       notNull =>   true | false
       autoInc =>   true | false
       option =>   unique | primary | index)
    */
    
    /** Creates a database table with the following format for the $columns array
    * <code>
    * $columns = array(action =>   add | alter | drop
    *                  name =>     Spaltenname
    *                  name_new => neuer Spaltenname, nur bei 'alter' belegt
    *                  type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
    *                  typeValue => Wert z.B. bei Varchar
    *                  defaultValue =>  Default Wert
    *                  notNull =>   true | false
    *                  autoInc =>   true | false
    *                  option =>   unique | primary | index)
    * </code>
    */
    public function createTable($table_name, $columns)
    {
    public function createTable($table_name,$columns) {
        $index = '';
        $sql = "CREATE TABLE $table_name (";
        foreach($columns as $col){
            $sql .= $col['name'].' '.$this->mapType($col['type'], $col['typeValue']).' ';
            //* Set default value
            if(isset($col['defaultValue']) && $col['defaultValue'] != '') {
                if($col['defaultValue'] == 'NULL' or $col['defaultValue'] == 'NOT NULL') {
                    $sql .= 'DEFAULT '.$col['defaultValue'].' ';
                } else {
                    $sql .= "DEFAULT '".$col['defaultValue']."' ";
                }
            } elseif($col['defaultValue'] != false) {
                $sql .= "DEFAULT '' ";
            }
            if(isset($col['defaultValue']) && $col['defaultValue'] != 'NULL' && $col['defaultValue'] != 'NOT NULL') {
    if($col['defaultValue'] != '') $sql .= "DEFAULT '".$col['defaultValue']."' ";
                if($col['notNull'] == true) {
                    $sql .= 'NOT NULL ';
                } else {
                    $sql .= 'NULL ';
                }
            }
            if(isset($col['autoInc']) && $col['autoInc'] == true){ $sql .= 'auto_increment '; }
    if($col['autoInc'] == true) $sql .= 'auto_increment ';
            $sql.= ',';
            //* Index Definitions
            if(isset($col['option']) && $col['option'] == 'primary'){ $index .= 'PRIMARY KEY ('.$col['name'].'),'; }
            if(isset($col['option']) && $col['option'] == 'index'){   $index .= 'INDEX ('.$col['name'].'),'; }
            if(isset($col['option']) && $col['option'] == 'unique'){  $index .= 'UNIQUE ('.$col['name'].'),'; }
    // key Definitionen
    if($col['option'] == 'primary') $index .= 'PRIMARY KEY ('.$col['name'].'),';
    if($col['option'] == 'index') $index .= 'INDEX ('.$col['name'].'),';
    if($col['option'] == 'unique') $index .= 'UNIQUE ('.$col['name'].'),';
       }
       $sql .= $index;
       $sql = substr($sql,0,-1);
@@ -417,20 +383,20 @@
       return true;
    }
       
    /** Changes a table definition. The format for the $columns array is
    * <code>
    * $columns = array(action =>   add | alter | drop
    *                  name =>     Spaltenname
    *                 name_new => neuer Spaltenname, nur bei 'alter' belegt
    *                 type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
    *                 typeValue => Wert z.B. bei Varchar
    *                 defaultValue =>  Default Wert
    *                 notNull =>   true | false
    *                 autoInc =>   true | false
    *                 option =>   unique | primary | index)
    /*
       $columns = array(action =>   add | alter | drop
       name =>     Spaltenname
       name_new => neuer Spaltenname, nur bei 'alter' belegt
       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
       typeValue => Wert z.B. bei Varchar
       defaultValue =>  Default Wert
       notNull =>   true | false
       autoInc =>   true | false
       option =>   unique | primary | index)
    */
    public function alterTable($table_name,$columns)
    {
    public function alterTable($table_name,$columns) {
       $index = '';
       $sql = "ALTER TABLE $table_name ";
       foreach($columns as $col){
@@ -450,7 +416,7 @@
            }
            if($col['autoInc'] == true) $sql .= 'auto_increment ';
            $sql.= ',';
            //* Index definitions
      // Index definitions
            if($col['option'] == 'primary') $index .= 'PRIMARY KEY ('.$col['name'].'),';
            if($col['option'] == 'index') $index .= 'INDEX ('.$col['name'].'),';
            if($col['option'] == 'unique') $index .= 'UNIQUE ('.$col['name'].'),';
@@ -458,53 +424,77 @@
       }
       $sql .= $index;
       $sql = substr($sql,0,-1);
       //die($sql);
       $this->query($sql);
       return true;
    }
       
    public function dropTable($table_name)
    {
    public function dropTable($table_name) {
        $this->check($table_name);
        $sql = "DROP TABLE '". $table_name."'";
        return $this->query($sql);
    }
       
    /** Return an array of table names */
    public function getTables($database_name = '')
    {
        if($database_name == ''){
            $database_name = $this->dbName;
        }
        $result = @mysql_list_tables($database_name);
        $tb_names = array();
        for ($i = 0; $i < @mysql_num_rows($result); $i++) {
            $tb_names[$i] = @mysql_tablename($result, $i);
    // gibt Array mit Tabellennamen zur�ck
    public function getTables($database_name = '') {
      if($database_name == '') $database_name = $this->dbName;
      $result = parent::query("SHOW TABLES FROM $database_name");
      for ($i = 0; $i < $result->num_rows; $i++) {
    $tb_names[$i] = (($result->data_seek( $i) && (($___mysqli_tmp = $result->fetch_row()) !== NULL)) ? array_shift($___mysqli_tmp) : false);
        }
        return $tb_names;       
    }
       
    // gibt Feldinformationen zur Tabelle zur�ck
    /*
       $columns = array(action =>   add | alter | drop
       name =>     Spaltenname
       name_new => neuer Spaltenname, nur bei 'alter' belegt
       type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
       typeValue => Wert z.B. bei Varchar
       defaultValue =>  Default Wert
       notNull =>   true | false
       autoInc =>   true | false
       option =>   unique | primary | index)
       
    public function tableInfo($table_name) {
        //* Tabellenfelder einlesen ?
        if($rows = $this->queryAllRecords('SHOW FIELDS FROM '.$table_name)){
     */
    function tableInfo($table_name) {
      global $go_api,$go_info;
      // Tabellenfelder einlesen
      if($rows = $go_api->db->queryAllRecords('SHOW FIELDS FROM '.$table_name)){
        foreach($rows as $row) {
            $name    = $row['Field'];
            $default = $row['Default'];
            $key     = $row['Key'];
            $extra   = $row['Extra'];
            $isnull  = $row['Null'];
            $type    = $row['Type'];
      $name = $row[0];
      $default = $row[4];
      $key = $row[3];
      $extra = $row[5];
      $isnull = $row[2];
      $type = $row[1];
        
            $column = array('name' => $name, 'defaultValue' => $default);
            //$column["type"] = $type;
            if(stristr($key, 'PRI')){ $column['option'] = 'primary'; }
            $column['notNull'] = stristr($isnull,'YES') ? false : true;
            if($extra == 'auto_increment'){ $column['autoInc'] = true; }
            
            //* Get the Data and Metatype
            if( stristr($type, 'int(') ){    $metaType = 'int32'; }
            if( stristr($type, 'bigint') ){  $metaType = 'int64'; }
      $column = array();
      $column['name'] = $name;
      //$column['type'] = $type;
      $column['defaultValue'] = $default;
      if(stristr($key,'PRI')) $column['option'] = 'primary';
      if(stristr($isnull,'YES')) {
        $column['notNull'] = false;
      } else {
        $column['notNull'] = true;
      }
      if($extra == 'auto_increment') $column['autoInc'] = true;
      // Type in Metatype umsetzen
      if(stristr($type,'int(')) $metaType = 'int32';
          if(stristr($type,'bigint')) $metaType = 'int64';
            if( stristr($type, 'char') ) {
                $metaType = 'char';
                $tmp_typeValue = explode('(',$type);
@@ -519,36 +509,75 @@
            if(stristr($type,'double')) $metaType = 'double';
            if(stristr($type,'blob'))   $metaType = 'blob';
            
            $column['type'] = $metaType;
            $columns[] = $column;
        }
            return $columns;
        } else {
            return false;
        }
      //$this->createTable('tester',$columns);
      /*
     $result = mysql_list_fields($go_info["server"]["db_name"],$table_name);
     $fields = mysql_num_fields ($result);
     $i = 0;
     $table = mysql_field_table ($result, $i);
     while ($i < $fields) {
     $name  = mysql_field_name  ($result, $i);
     $type  = mysql_field_type  ($result, $i);
     $len   = mysql_field_len   ($result, $i);
     $flags = mysql_field_flags ($result, $i);
     print_r($flags);
     $columns = array(name => $name,
     type =>     "",
     defaultValue =>  "",
     isnull =>   1,
     option =>   "");
     $returnvar[] = $columns;
     $i++;
     }
       */
    }
       
    public function mapType($metaType, $typeValue) {
        //TODO: ? this is not required ?? global $go_api;
      global $go_api;
        $metaType = strtolower($metaType);
        switch ($metaType) {
        case 'int16':
            return 'smallint';
      break;
        case 'int32':
            return 'int';
      break;
        case 'int64':
            return 'bigint';
      break;
        case 'double':
            return 'double';
      break;
        case 'char':
            return 'char';
      break;
        case 'varchar':
            if($typeValue < 1) die('Datenbank Fehler: F�r diesen Datentyp ist eine L�ngenangabe notwendig.');
      if($typeValue < 1) die('Database failure: Lenght required for these data types.');
            return 'varchar('.$typeValue.')';
          break;
        case 'text':
            return 'text';
          break;
        case 'blob':
            return 'blob';
          break;
        }
    }
server/lib/app.inc.php
old mode 100644 new mode 100755
@@ -40,11 +40,6 @@
                if($conf['start_db'] == true) {
                    $this->load('db_'.$conf['db_type']);
                    $this->db = new db;
                    if($this->db->linkId) $this->db->closeConn();
                    $this->db->dbHost = $conf['db_host'];
                    $this->db->dbName = $conf['db_database'];
                    $this->db->dbUser = $conf['db_user'];
                    $this->db->dbPass = $conf['db_password'];
                    
                    /*
                    Initialize the connection to the master DB, 
@@ -53,11 +48,6 @@
                    
                    if($conf['dbmaster_host'] != '' && $conf['dbmaster_host'] != $conf['db_host']) {
                        $this->dbmaster = new db;
                        if($this->dbmaster->linkId) $this->dbmaster->closeConn();
                        $this->dbmaster->dbHost = $conf['dbmaster_host'];
                        $this->dbmaster->dbName = $conf['dbmaster_database'];
                        $this->dbmaster->dbUser = $conf['dbmaster_user'];
                        $this->dbmaster->dbPass = $conf['dbmaster_password'];
                    } else {
                        $this->dbmaster = $this->db;
                    }
server/lib/classes/db_mysql.inc.php
@@ -1,3 +1,4 @@
<?php
/*
Copyright (c) 2005, Till Brehm, projektfarm Gmbh
@@ -27,28 +28,27 @@
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
    class db
class db extends mysqli
    {
        var $dbHost = '';        // hostname of the MySQL server
        var $dbName = '';        // logical database name on that server
        var $dbUser = '';        // database authorized user
        var $dbPass = '';        // user's password
        var $dbCharset = 'utf8';// Database charset
        var $dbNewLink = false; // Return a new linkID when connect is called again
        var $dbClientFlags = 0; // MySQL Client falgs
        var $linkId = 0;        // last result of mysql_connect()
        var $queryId = 0;        // last result of mysql_query()
        var $record    = array();    // last record fetched
        var $autoCommit = 1;    // Autocommit Transactions
        var $currentRow;        // current row number
        var $errorNumber = 0;    // last error number
        var $errorMessage = '';    // last error message
        var $errorLocation = '';// last error location
        var $show_error_messages = true;
  private $dbHost = '';        // hostname of the MySQL server
  private $dbName = '';        // logical database name on that server
  private $dbUser = '';        // database authorized user
  private $dbPass = '';        // user's password
  private $dbCharset = 'utf8';// Database charset
  private $dbNewLink = false; // Return a new linkID when connect is called again
  private $dbClientFlags = 0; // MySQL Client falgs
  private $linkId = 0;        // last result of mysqli_connect()
  private $queryId = 0;        // last result of mysqli_query()
  private $record    = array();    // last record fetched
  private $autoCommit = 1;    // Autocommit Transactions
  private $currentRow;        // current row number
  private $errorNumber = 0;    // last error number
  public $errorMessage = '';    // last error message
  private $errorLocation = '';// last error location
  public $show_error_messages = false; // false in server, true in interface
        // constructor
        public function __construct() {
            global $conf;
            $this->dbHost = $conf['db_host'];
            $this->dbName = $conf['db_database'];
@@ -57,59 +57,48 @@
            $this->dbCharset = $conf['db_charset'];
            $this->dbNewLink = $conf['db_new_link'];
            $this->dbClientFlags = $conf['db_client_flags'];
            //$this->connect();
    parent::__construct($conf['db_host'], $conf['db_user'],$conf['db_password'],$conf['db_database']);
    if ($this->connect_error) {
      $this->updateError('DB::__construct');
      return false;
    }
    parent::query( 'SET NAMES '.$this->dbCharset);
    parent::query( "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
        }
        
        public function __destruct() {
            $this->closeConn();
    $this->close(); // helps avoid memory leaks, and persitent connections that don't go away.
        }
        // error handler
        function updateError($location)
        {
  public function updateError($location) {
            global $app;
            $this->errorNumber = @mysql_errno($this->linkId);
            $this->errorMessage = @mysql_error($this->linkId);
    if($this->connect_error) {
      $this->errorNumber = $this->connect_errno;
      $this->errorMessage = $this->connect_error;
    } else {
      $this->errorNumber = $this->errno;
      $this->errorMessage = $this->error;
    }
            $this->errorLocation = $location;
            if($this->errorNumber && $this->show_error_messages && method_exists($app,'log'))
            {
                // echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
                $app->log($this->errorLocation.' '.$this->errorMessage,LOGLEVEL_WARN);
                //flush();
    if($this->errorNumber) {
      $error_msg = $this->errorLocation .' '. $this->errorMessage;
      // This right here will allow us to use the samefile for server & interface
      if($this->show_error_messages) {
    echo $error_msg;
      } else if(method_exists($app, 'log')) {
    $app->log($error_msg, LOGLEVEL_WARN);
      }
            }
        }
        function connect()
        {
            if($this->linkId == 0)
            {
                $this->linkId = @mysql_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbNewLink, $this->dbClientFlags);
                if(!$this->linkId)
                {
                    $this->updateError('DB::connect()-> mysql_connect');
                    return false;
                }
                $this->queryId = @mysql_query('SET NAMES '.$this->dbCharset, $this->linkId);
                $this->queryId = @mysql_query("SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'", $this->linkId);
            }
            return true;
        }
        function query($queryString)
        {
            if(!$this->connect())
            {
                return false;
            }
            if(!mysql_select_db($this->dbName, $this->linkId))
            {
                $this->updateError('DB::connect()-> mysql_select_db');
                return false;
            }
            $this->queryId = @mysql_query($queryString, $this->linkId);
            $this->updateError('DB::query('.$queryString.') -> mysql_query');
            if(!$this->queryId)
            {
  public function query($queryString) {
    $this->queryId = parent::query($queryString);
    $this->updateError('DB::query('.$queryString.') -> mysqli_query');
    if(!$this->queryId) {
                return false;
            }
            $this->currentRow = 0;
@@ -117,8 +106,7 @@
        }
        // returns all records in an array
        function queryAllRecords($queryString)
        {
  public function queryAllRecords($queryString) {
            if(!$this->query($queryString))
            {
                return false;
@@ -132,8 +120,7 @@
        }
        // returns one record in an array
        function queryOneRecord($queryString)
        {
  public function queryOneRecord($queryString) {
            if(!$this->query($queryString) || $this->numRows() == 0)
            {
                return false;
@@ -142,9 +129,8 @@
        }
        // returns the next record in an array
        function nextRecord()
        {
            $this->record = mysql_fetch_assoc($this->queryId);
  public function nextRecord() {
    $this->record = $this->queryId->fetch_assoc();
            $this->updateError('DB::nextRecord()-> mysql_fetch_array');
            if(!$this->record || !is_array($this->record))
            {
@@ -155,42 +141,29 @@
        }
        // returns number of rows returned by the last select query
        function numRows()
        {
            return mysql_num_rows($this->queryId);
  public function numRows() {
    return $this->queryId->num_rows;
        }
        
        // returns mySQL insert id
        function insertID()
        {
            return mysql_insert_id($this->linkId);
  public function insertID() {
    return $this->insert_id;
  }
  // Check der variablen
  // Really.. using quote should be phased out in favor of using bind_param's.  Though, for legacy code..
  // here's the equivalent
  public function quote($formfield) {
    return $this->escape_string($formfield);
        }
        
        // Check der variablen
        // deprecated, now use quote
        function check($formfield)
        {
            return $this->quote($formfield);
        }
        // Check der variablen
        function quote($formfield)
        {
            if(!$this->connect()){
                $this->updateError('WARNING: mysql_connect: Used addslashes instead of mysql_real_escape_string');
                return addslashes($formfield);
            }
            return mysql_real_escape_string($formfield, $this->linkId);
        }
        // Check der variablen
        function unquote($formfield)
        {
  public function unquote($formfield) {
            return stripslashes($formfield);
        }
        
        function toLower($record) {
public function toLower($record) {
            if(is_array($record)) {
                foreach($record as $key => $val) {
                    $key = strtolower($key);
@@ -349,30 +322,23 @@
    }
 
       public function closeConn()
        {
            if($this->linkId)
            {
                mysql_close($this->linkId);
                return true;
            } else { return false; }
        }
        public function freeResult($query) 
        {
            if(mysql_free_result($query))
            {
      if(is_object($query) && (get_class($query) == "mysqli_result")) {
    $query->free();
                return true;
            } else {
                return false;
            }
        }
       
       function delete() {
    /* TODO: Does anything use this? */
    public function delete() {
       
       }
       
       function Transaction($action) {
    /* TODO: Does anything use this? */
    public function Transaction($action) {
       //action = begin, commit oder rollback
       
       }
@@ -391,7 +357,7 @@
       
       */
       
       function createTable($table_name,$columns) {
    public function createTable($table_name,$columns) {
       $index = '';
       $sql = "CREATE TABLE $table_name (";
       foreach($columns as $col){
@@ -430,7 +396,7 @@
       
       
       */
       function alterTable($table_name,$columns) {
    public function alterTable($table_name,$columns) {
       $index = '';
       $sql = "ALTER TABLE $table_name ";
       foreach($columns as $col){
@@ -464,19 +430,19 @@
       return true;
       }
       
       function dropTable($table_name) {
    public function dropTable($table_name) {
       $this->check($table_name);
       $sql = "DROP TABLE '". $table_name."'";
       return $this->query($sql);
       }
       
       // gibt Array mit Tabellennamen zur�ck
       function getTables($database_name = '') {
    public function getTables($database_name = '') {
           
            if($database_name == '') $database_name = $this->dbName;
            $result = mysql_list_tables($database_name);
            for ($i = 0; $i < mysql_num_rows($result); $i++) {
                $tb_names[$i] = mysql_tablename($result, $i);
      $result = parent::query("SHOW TABLES FROM $database_name");
      for ($i = 0; $i < $result->num_rows; $i++) {
    $tb_names[$i] = (($result->data_seek( $i) && (($___mysqli_tmp = $result->fetch_row()) !== NULL)) ? array_shift($___mysqli_tmp) : false);
            }
            return $tb_names;       
       }
@@ -583,7 +549,7 @@
       
       }
       
       function mapType($metaType,$typeValue) {
    public function mapType($metaType,$typeValue) {
       global $go_api;
       $metaType = strtolower($metaType);
       switch ($metaType) {