MOON
Server: Apache
System: Linux u18017238.onlinehome-server.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User: emblazeone (1003)
PHP: 7.3.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/emblazeone/www/_backups/sql.php
<?

define('_tseDB_NUM',1);			// Result type
define('_tseDB_ASSOC',2);		// Result type
define('_tseDB_BOTH',3);		// Result type

// For query_val, what kind of value to return:
define('_tseAuto',0);			// Single value if 1 column in 1 row returned from a query;
		    // fetch_array (assoc) if several columns returned from a query;
define('_tseSingle',1);			// Single value always
define('_tseRow',2);			// Row
define('_tseRows',3);			// Rows
define('_tseList',4);			// List
define('_tseFlags',5);			// Flags

class tseSQLResult {
  var $sql;			// Link to parent SQL object
  var $dbtype;
  var $result;			// Result handle
  var $num_rows;
  var $total_rows;		// Total rows found
  var $affected_rows;

  function tseSQLResult(&$sql,$result) {
    $this->sql=&$sql;
    $this->dbtype=&$this->sql->dbtype;
    $this->result=$result;
    $this->num_rows = $sql->num_rows;  		// Number of rows in result
    $this->affected_rows = $sql->affected_rows;	// Number of rows affected
    $this->total_rows = $sql->total_rows;	//
  }

  function found_rows() {
    switch ($this->dbtype) {
      case 1:	// MySQL
        $res = mysqli_query('SELECT FOUND_ROWS()',$this->sql->handle);
        list($total) = mysqli_fetch_row($res);
    return $total;
    break;
      case 2:	// On PostgreSQL it is not implemented
      default:
    return false;
    }
  }

  function insert_id() {return $this->last_id();}
  function last_id() {
    switch($this->dbtype) {
      case 1:	// MySQL
    return mysqli_insert_id($this->sql->handle);
    break;
      case 2:   // PostgreSQL
    return pg_last_oid($this->result);
    break;
      default:
    return false;
    }

  }	// insert_id or last_oid

  function fetch_array($result_type = _tseDB_ASSOC, $row = 0) {
    switch($this->dbtype) {
      case 1:	// MySQL
        return mysqli_fetch_array($this->result,$this->sql->restypetrans[$result_type]);
        break;
      case 2:	// PostgreSQL
        return pg_fetch_array($this->result,$row,$this->sql->restypetrans[$result_type]);
        break;
      default:
    echo $this->dbtype;
        return false;
    }
  }

  function fetch_row($row = 0) {
    switch($this->dbtype) {
      case 1:	// MySQL
        return mysqli_fetch_row($this->result);
        break;
      case 2:	// PostgreSQL
        return pg_fetch_row($this->result,$row);
        break;
      default:
        return false;
    }
  }

  // Returns a recordset. Records array keys can be set to values of a field, specified in $key
  function fetch_rows($key='') {
    while($row = $this->fetch_array()) { if ($key) $rows[$row[$key]]=$row; else $rows[]=$row;}
    return (is_array($rows)?$rows:false);
  }

  function fetch_list($key='',$field='') {
    // If you set $key, the value of the field '$key' will be used as key for the returning array
    // else, the first column in the row will be used as key, if there are 2+ columns in result row
    // if result has only one column, returning array will be indexed in order of result

    // If you set $field, the value of the field '$field' will be used as value for the returning erray
    // else the second column will be used if 2+ columns is in result
    // if result has only one column, it will be used for values

    // Examples:
    // SELECT id,name FROM table	-->	$list[$id]=$name
    // SELECT name FROM table		-->	$list[]=$name
    // SELECT id,name,email FROM table	-->	$list[$name]=$email (if fetch_list('name','email') was called)
    while($row = $this->fetch_array(_tseDB_BOTH)) {
      if (count($row)<2) $list[]=$row[0];
      else $list[$row[$key?$key:0]] = $row[$field?$field:1];
    }
    return (is_array($list)?$list:false);
  }

  function fetch_flags($key='',$field='') {
    $list = $this->fetch_list($key,$field);
    if ($list) {
      foreach ($list as $k=>$v) $flags[pow(2,$k-1)]=$v;
      return $flags;
    } else return false;
  }

  function seek($offset) {
    switch($this->dbtype) {
      case 1:	// MySQL
        return mysqli_data_seek($this->result,$offset);
        break;
      case 2:	// PostgreSQL
        return pg_result_seek($this->result,$offset);
        break;
      default:
        return false;
    }
  }

  function num_fields() {
    switch($this->dbtype) {
      case 1:	// MySQL
    return mysqli_num_fields($this->result);
    break;
      case 2:   // PostgreSQL
    return pg_num_fields($this->result);
    break;
      default:
    return false;
    }

  }	// num_fields

  function field_len($field_offset) {
    switch($this->dbtype) {
      case 1:	// MySQL
    return mysqli_field_len($this->result,$field_offset);
    break;
      case 2:   // PostgreSQL
    return pg_field_size($this->result,$field_offset);
    break;
      default:
    return false;
    }

  }	// field_len

  function field_name($field_offset) {
    switch($this->dbtype) {
      case 1:	// MySQL
    return mysqli_field_name($this->result,$field_offset);
    break;
      case 2:   // PostgreSQL
    return pg_field_name($this->result,$field_offset);
    break;
      default:
    return false;
    }

  }	// field_name



  function fetch_result() { }
  function free() { }

}

class tseSQLClass {
  var $dbname;
  var $dbtype = 0;     		    // Database type
  var $handle = 0;   		    // Connection handle
  var $sql;			            // Alias for $handle
  var $result = 0;		        // Current SQL result var
  var $res;			            // Alias for $result
  var $error = '';	    	    // Error string
  var $errno = 0;      		    // Error number
  var $num_rows = null;  		// Number of rows in result
  var $affected_rows = null;	// Number of rows affected
  var $total_rows = null;	    //
  var $queryStr = ''; 		    // Current query string
  var $pf = '';			        // Tables prefix
  var $locks = array();		    // Logical Locks acquired
  var $permanent;		        // If true, means that connection used is permanent
  var $queriesCounter = 0;  	// Counts queries performed during the session

  var $connected = false;	    // Connected flag, to free itself before reconnecting
  var $inTransaction = false;	// During transaction (if you manipulate it using ->begin, ->commit, ->rollback - you can know it by this flag

  var $restypetrans;		    // Result Type Translator array

  function tseSQLClass($dsn='',$pcon=false) {
    $this->resobj = new tseSQLResult($this,0);
    $this->result = &$this->resobj->result;
    $this->res = &$this->resobj->result;
    $this->sql = &$this->handle;
    if($dsn) $this->connect($dsn,$pcon);
  }

  function pconnect($dsn) {
    return connect($dsn,true);
  }

  function connect($dsn,$pcon=false) { //$host='',$port='',$dbname='',$user='',$pass='') {
    extract(parse_url($dsn));
    $dbname = substr($path,1);
    $this->dbname=$dbname;
    $dbtype = &$scheme;

    $this->permanent = $pcon;

    switch ($dbtype) {
      case 'mysql':
        $dbtype = 1;
        $this->restypetrans = array(_tseDB_NUM=>mysqli_NUM,_tseDB_ASSOC=>MYSQLI_ASSOC,_tseDB_BOTH=>MYSQLI_BOTH);
        break;
      case 'pgsql':
        $dbtype = 2;
        $this->restypetrans = array(_tseDB_NUM=>PGSQL_NUM,_tseDB_ASSOC=>PGSQL_ASSOC,_tseDB_BOTH=>PGSQL_BOTH);
        break;
      case 'mssql': $dbtype = 3; break;
      case 'oracle': $dbtype = 4; break;
      default: break;
    }

    switch ($dbtype) {
      case 1:	// MySQL
    if ($host{0}=='|') { $port = ':'.str_replace('|','/',$host); $host = 'localhost'; }
    else {
      if ($host=='') $host = "localhost";
      if ($port!='') $port = ":$port";
    }
        $this->close();
    $fconnect = $pcon?'mysqli_pconnect':'mysqli_connect';
    $this->handle = $fconnect("$host$port",$user,$pass);
    if ($this->handle) {
          $this->dbtype = $dbtype;
      $this->error = 0;
      $this->errno = '';
      if ($dbname!='') {
            if (!mysqli_select_db($this->handle,$dbname)) {
          $this->error = mysqli_error($this->handle);
          $this->errno = mysqli_errno($this->handle);
          return false;
        }
          }
          $this->connected = true;
    } else {
      $this->error = mysqli_error($this->handle);
      $this->errno = mysqli_errno($this->handle);
    }
        $this->queryStr = '';
    $this->num_rows = 0;
    $this->affected_rows = 0;
    return $this->handle;
        break;
      case 2:	// PostgreSQL
        $this->close();
    $fconnect = $pcon?'pg_pconnect':'pg_connect';
    $this->handle = $fconnect(
          ((!empty($host))?"host=$host ":'').
          ((!empty($port))?"port=$port ":'').
          ((!empty($dbname))?"dbname=$dbname ":'').
          ((!empty($user))?"user=$user ":'').
          ((!empty($password))?"password=$password ":'')
    );
        $this->dbtype = 0;
    $this->error = 0;
    $this->errno = '';
        $this->queryStr = '';
    $this->num_rows = 0;
    $this->affected_rows = 0;
        if ($this->handle) $this->connected = true;
    return ($this->handle);
    break;
      default:
    return false;
    }
  }

  function close() {
    switch ($this->dbtype) {
      case 1:	// MySQL
        if ($this->result) mysqli_free_result($this->result);
    if ($this->handle) mysqli_close($this->handle);
        $this->result = 0;
    $this->handle = 0;
        $this->connected = false;
    break;
      case 2:	// PostgreSQL
        if ($this->result) pg_free_result($this->result);
    if ($this->handle) pg_close($this->handle);
        $this->result = 0;
    $this->handle = 0;
        $this->connected = false;
    break;
      default:
    return false;
    }
    return true;
  }

  function begin() {
    switch ($this->dbtype) {
      case 1:	// MySQL
        $this->result = mysqli_query('SET AUTOCOMMIT = 0',$this->handle);
    $this->inTransaction = true;
    return $this->result;
    break;
      case 2:	// PostgreSQL
        $this->result = pg_query($this->handle,'BEGIN WORK');
    $this->inTransaction = true;
    return $this->result;
    break;
      default:
    return false;
    }
  }

  function commit() {
    switch ($this->dbtype) {
      case 1:	// MySQL
        $this->result = mysqli_query('COMMIT',$this->handle);
    $this->inTransaction = false;
    return $this->result;
    break;
      case 2:	// PostgreSQL
        $this->result = pg_query($this->handle,'COMMIT');
    $this->inTransaction = false;
    return $this->result;
    break;
      default:
    return false;
    }
  }

  function rollback() {
    switch ($this->dbtype) {
      case 1:	// MySQL
        $this->result = mysqli_query('ROLLBACK',$this->handle);
    $this->inTransaction = false;
    return $this->result;
    break;
      case 2:	// PostgreSQL
        $this->result = pg_query($this->handle,'ROLLBACK');
    $this->inTransaction = false;
    return $this->result;
    break;
      default:
    return false;
    }
  }

  function lock($name='',$timeout=5) { // MySQL ONLY logical locks
    switch ($this->dbtype) {
      case 1:	// MySQL
    if (!$name) $name='tselock_'+count($this->locks);
        $res = mysqli_query("SELECT GET_LOCK('$name',$timeout)",$this->handle);
        list($locked) = mysqli_fetch_row($res);
    if($locked) array_push($this->locks,"$name");
    return $locked;
    break;
      default:
    return false;
    }
  }

  function unlock($name='') { // read, write or full
    switch ($this->dbtype) {
      case 1:	// MySQL
    if (!$name) $name=array_pop($this->locks);
    else
      if (($lock=array_search($name,$this->locks))!==false) unset($this->locks[$lock]);
    mysqli_query("DO RELEASE_LOCK('$name')",$this->handle);
    return true; //$this->result;
    break;
      default:
    return false;
    }
  }

  function errorHandler() { // Abstract
    tse_error_handler($this->errno,"SQL Error: {$this->error}","Query: {$this->queryStr}\n");
    #trigger_error(E_USER_ERROR);
    return false;
  }

  function query($queryStr='') {	// Executes a query
    if ($queryStr!='') $this->queryStr = $queryStr;
    else $queryStr = $this->queryStr;
    $cmd = strtoupper(substr($queryStr,0,strpos($queryStr,' ')));

    if ($this->testMode) {
      if (!$this->noDebug) debug($queryStr);
      if ($cmd!='SELECT') return false;
    }

    switch ($this->dbtype) {
      case 1:	// MySQL
        $this->resobj->result = mysqli_query($this->handle,$queryStr);
    if ($this->result) {
      if ($cmd=='SELECT') {
        $this->affected_rows = null;
        $this->num_rows = (int)mysqli_num_rows($this->result);
        if (stripos($queryStr,'SQL_CALC_FOUND_ROWS')) $this->total = $this->resobj->found_rows();
        else $this->total_rows = null;
      } else {
        $this->num_rows = null;
        $this->affected_rows = (int)mysqli_affected_rows($this->handle);
      }
          $this->empty = ($this->num_rows===0 || $this->affected_rows===0);
      $this->error = 0;
      $this->errno = '';
    } else {
      $this->num_rows = 0;
      $this->affected_rows = -1;
      $this->error = mysqli_error($this->handle);
      $this->errno = mysqli_errno($this->handle);
      $this->errorHandler();
    }
    $this->queriesCounter++;
    return new tseSQLResult($this,$this->result);
    //return $this->resobj;
    break;
      case 2:	// PostgreSQL
        $this->resobj->result = pg_query($this->handle,$queryStr);
    if ($this->result) {
      $this->num_rows = pg_num_rows($this->result);
          $this->empty = ($this->num_rows==0);
      $this->affected_rows = pg_affected_rows($this->result);
      $this->error = 0;
      $this->errno = '';
    } else {
      $this->num_rows = 0;
      $this->affected_rows = -1;
      $this->error = pg_result_error($this->result);
      $this->errno = -1;
      $this->errorHandler();
    }
    $this->queriesCounter++;
    return new tseSQLResult($this,$this->result);
    //return $this->resobj;
    break;
      default:
    return false;
    }
  }

  // For single value $field parameter specifies which column to return from the record (first if omitted)
  function query_val($queryStr='',$mode=_tseAuto, $key='', $field='') {return $this->queryval($queryStr,$mode,$key,$field);}

  function queryval($queryStr='',$mode=_tseAuto, $key='', $field='', &$total=-1) {
    $res = $this->query($queryStr);

    if ($res && !$this->empty) {
      if ($mode==_tseRows) $row=$this->fetch_rows($key);
      elseif ($mode==_tseSingle&&!$key) $row=$this->fetch_row();
      elseif ($mode==_tseList) $row=$this->fetch_list($key,$field);
      elseif ($mode==_tseFlags) $row=$this->fetch_flags($key,$field);
      else $row=$this->fetch_array();



      if ($total!==-1) { $this->query('SELECT FOUND_ROWS();'); list($total) = $this->fetch_row(); }

      switch($mode) {
        case _tseAuto: return (count($row)==1?array_shift($row):$row);
        case _tseSingle: return ($key?$row[$key]:$row[0]);
        default: return $row;
      }
    } else return false;
  }

  function sysquery($queryStr='') {
    if ($queryStr=='') $queryStr = $this->queryStr;
    $queryStr = str_replace('%',$this->pf,$queryStr);
    $this->query($queryStr);
  }

  function insert_id() { return $this->resobj->last_id(); }
  function last_id() { return $this->resobj->last_id(); }
  function fetch_array($result_type = _tseDB_ASSOC, $row = 0) { return $this->resobj->fetch_array($result_type,$row); }
  function fetch_row($row = 0) { return $this->resobj->fetch_row($row); }
  function fetch_rows($field='') { return $this->resobj->fetch_rows($field); }
  function fetch_list($key='id',$val='') { return $this->resobj->fetch_list($key,$val); }
  function fetch_flags($key='id',$val='') { return $this->resobj->fetch_flags($key,$val); }
  function seek($offset) {return $this->resobj->seek($offset); }
  function found_rows() { return $this->resobj->found_rows(); }

}

?>