Login   Register  
PHP Classes
elePHPant
Icontem

File: database.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Sven Wagener  >  database class  >  database.class.php  
File: database.class.php
Role: Class source
Content type: text/plain
Description: The Database Class file
Class: database class
mSQL,MS SQL,MySQL,ODBC,Postgre,Sybase DB Layer
 

Contents

Class file image Download
<?php
/**
* Database class
*
* @author    Sven Wagener <sven_dot_wagener_at_rheinschmiede_dot_de>
* @copyright Sven Wagener
* @include      Funktion:_include_
*/
class database{
    var 
$database_types="";
    
    var 
$db_connect="";
    var 
$db_close="";
    var 
$db_select_db="";
    var 
$db_query="";
    var 
$db_error="";
    var 
$db_error_nr="";
    var 
$db_fetch_array="";
    var 
$db_num_rows="";
    
    var 
$host;
    var 
$database;
    var 
$user;
    var 
$password;
    var 
$port;
    var 
$database_type;
    var 
$dsn;
    
    var 
$sql;
    
    var 
$con// variable for connection id
    
var $con_string// variable for connection string
    
var $query_id// variable for query id
    
    
var $errors// variable for error messages
    
var $error_count=0// variable for counting errors
    
var $error_nr;
    var 
$error;
    
    var 
$debug=false// debug mode off
    
    /**
    * Constructor of class - Initializes class and connects to the database
    * @param string $database_type the name of the database (ifx=Informix,msql=MiniSQL,mssql=MS SQL,mysql=MySQL,pg=Postgres SQL,sybase=Sybase)
    * @param string $host the host of the database
    * @param string $database the name of the database
    * @param string $user the name of the user for the database
    * @param string $password the passord of the user for the database
    * @desc Constructor of class - Initializes class and connects to the database.
    *
    *  You can use this shortcuts for the database type:
    *
    *         ifx -> INFORMIX
    *         msql -> MiniSQL
    *         mssql -> Microsoft SQL Server
    *         mysql -> MySQL
    *        odbc -> ODBC
    *         pg -> Postgres SQL
    *        sybase -> Sybase
    */
    
function database($database_type,$host,$database,$user,$password,$port=false,$dsn=false){
        
$database_type=strtolower($database_type);
        
$this->host=$host;
        
$this->database=$database;
        
$this->user=$user;
        
$this->password=$password;
        
$this->port=$port;
        
$this->dsn=$dsn;
        
        
$this->database_types=array("ifx","msql","mssql","mysql","odbc","pg","sybase");
        
        
// Setting database type and connect to database
        
if(in_array($database_type,$this->database_types)){
            
$this->database_type=$database_type;
            
            
$this->db_connect=$this->database_type."_connect";
            
$this->db_close=$this->database_type."_close";
            
$this->db_select_db=$this->database_type."_select_db";
            
            if(
$database_type=="odbc"){
                
$this->db_query=$this->database_type."_exec";
                
$this->db_fetch_array=$this->database_type."_fetch_row";
                
$this->db_error=$this->database_type."_errormsg";
                
            }else{
                
$this->db_query=$this->database_type."_query";
                
$this->db_fetch_array=$this->database_type."_fetch_array";
                
$this->db_error=$this->database_type."_error";
                
$this->db_error_nr=$this->database_type."_errno";
            }
            
            
$this->db_num_rows=$this->database_type."_num_rows";
            
            return 
$this->connect();
        }else{
            
$this->halt("Database type not supported");
            return 
false;
        }
    }
    
    
/**
    * This function connects the database
    * @return boolean $is_connected Returns true if connection was successful otherwise false
    * @desc This function connects to the database which is set in the constructor
    */
    
function connect(){
        
// Selecting connection function and connecting
        
        
if($this->con==""){
            
// INFORMIX
            
if($this->database_type=="ifx"){
                
$this->con=call_user_func($this->db_connect,$this->database."@".$this->host,$this->user,$this->password);
            }else if(
$this->database_type=="mysql"){
                
// With port
                
if(!$this->port){
                    
$this->con=call_user_func($this->db_connect,$this->host.":".$this->port,$this->user,$this->password);
                }
                
// Without port
                
else{
                    
$this->con=call_user_func($this->db_connect,$this->host,$this->user,$this->password);
                }
                
// mSQL
            
}else if($this->database_type=="msql"){
                
$this->con=call_user_func($this->db_connect,$this->host,$this->user,$this->password);
                
// MS SQL Server
            
}else if($this->database_type=="mssql"){
                
$this->con=call_user_func($this->db_connect,$this->host,$this->user,$this->password);
                
// ODBC
            
}else if($this->database_type=="odbc"){
                
$this->con=call_user_func($this->db_connect,$this->dsn,$this->user,$this->password);
                
// Postgres SQL
            
}else if($this->database_type=="pg"){
                
// With port
                
if(!$this->port){
                    
$this->con=call_user_func($this->db_connect,"host=".$this->host." port=".$this->port." dbname=".$this->database." user=".$this->user." password=".$this->password);
                }
                
// Without port
                
else{
                    
$this->con=call_user_func($this->db_connect,"host=".$this->host." dbname=".$this->database." user=".$this->user." password=".$this->password);
                }
                
// Sybase
            
}else if($this->database_type=="sybase"){
                
$this->con=call_user_func($this->db_connect,$this->host,$this->user,$this->password);
            }
            
            if(!
$this->con){
                
$this->halt("Wrong connection data! Can't establish connection to host.");
                return 
false;
            }else{
                if(
$this->database_type!="odbc"){
                    if(!
call_user_func($this->db_select_db,$this->database,$this->con)){
                        
$this->halt("Wrong database data! Can't select database.");
                        return 
false;
                    }else{
                        return 
true;
                    }
                }
            }
        }else{
            
$this->halt("Already connected to database.");
            return 
false;
        }
    }
    
    
/**
    * This function disconnects from the database
    * @desc This function disconnects from the database
    */
    
function disconnect(){
        if(@
call_user_func($this->db_close,$this->con)){
            return 
true;
        }else{
            
$this->halt("Not connected yet");
            return 
false;
        }
    }
    
    
/**
    * This function starts the sql query
    * @param string $sql_statement the sql statement
    * @return boolean $successfull returns false on errors otherwise true
    * @desc This function disconnects from the database
    */
    
function query($sql_statement){
        
$this->sql=$sql_statement;
        if(
$this->debug){
            
printf("<!-- SQL statement: %s<br />//-->\r\n",$this->sql);            
        }
        if(
$this->database_type=="odbc"){
            
// ODBC
            
if(!$this->query_id=call_user_func($this->db_query,$this->con,$this->sql)){
                
$this->halt("No database connection exists or invalid query");
            }else{
                if (!
$this->query_id) {
                    
$this->halt("Invalid SQL Query");
                    return 
false;
                }else{
                    return 
true;
                }
            }
        }else{
            
// All other databases
            
if(!$this->query_id=call_user_func($this->db_query,$this->sql,$this->con)){
                
$this->halt("No database connection exists or invalid query");
                
            }else{
                if (!
$this->query_id) {
                    
                    
$this->halt("Invalid SQL Query");
                    return 
false;
                }else{
                    return 
true;
                }
            }
        }
    }
    
    
/**
    * This function returns the last error
    * @return string $error the error as string
    * @desc This function returns the last error
    */
    
function get_error(){
        return 
call_user_func($this->db_error,$this->con);
    }
    
    
/**
    * This function returns the last error id
    * @return int $error the error as integer
    * @desc This function returns the last error id
    */
    
function get_error_nr(){
        return 
call_user_func($this->db_error_nr,$this->con);
    }
    
    
/**
    * This function returns a row of the resultset
    * @return array $row the row as array or false if there is no more row
    * @desc This function returns a row of the resultset
    */
    
function get_row(){
        if(
$this->database_type=="odbc"){
            
// ODBC database
            
if($row=call_user_func($this->db_fetch_array,$this->query_id)){
                
                for (
$i=1$i<=odbc_num_fields($this->query_id); $i++) {
                    
$fieldname=odbc_field_name($this->query_id,$i);
                    
$row_array[$fieldname]=odbc_result($this->query_id,$i);
                }
                return 
$row_array;
            }else{
                return 
false;
            }
        }else{
            
// All other databases
            
$row=call_user_func($this->db_fetch_array,$this->query_id);
            return 
$row;
        }
    }
    
    
/**
    * This function returns number of rows in the resultset
    * @return int $row_count the nuber of rows in the resultset
    * @desc This function returns number of rows in the resultset
    */
    
function count_rows(){
        
$row_count=call_user_func($this->db_num_rows,$this->query_id);
        if(
$row_count>=0){
            return 
$row_count;
        }else{
            
$this->halt("Can't count rows before query was made");
            return 
false;
        }
    }
    
/**
    * This function returns all tables of the database in an array
    * @return array $tables all tables of the database in an array
    * @desc This function returns all tables of the database in an array
    */
    
function get_tables(){
        if(
$this->database_type=="odbc"){
            
// ODBC databases
            
$tablelist=odbc_tables($this->con);
            
            for(
$i=0;odbc_fetch_row($tablelist);$i++) {
                
$tables[$i]=odbc_result($tablelist,3);
            }
            return 
$tables;
        }else{
            
// All other databases
            
$tables "";
            
$sql="SHOW TABLES";
            
$this->query_id($sql);
            for(
$i=0;$data=$this->get_row();$i++){
                
$tables[$i]=$data['Tables_in_'.$this->database];
            }
            return 
$tables;
        }
    }
    
    
/**
    * Prints out a error message
    * @param string $message all occurred errors as array
    * @desc Returns all occurred errors
    */
    
function halt($message){
        if(
$this->debug){
            
$this->error_nr=$this->get_error_nr();
            
$this->error=$this->get_error();
                    
            
printf("Error: %s<br />\n"$message);
            
            if(
$this->error_nr!="" && $this->error!=""){
                
printf("Database Error: %s (%s)<br />\n",$this->error_nr,$this->error);
            }
            die (
"Session halted.");
        }
    }
    
    
/**
    * Switches to debug mode
    * @param boolean $switch
    * @desc Switches to debug mode
    */
    
function debug_mode($debug=true){
        
$this->debug=$debug;
    }
    
    
}

?>