Source: tobject.phps - download
<?php
/* 
 @ Project: TObject 1.0
 @ Link http://daif.net/tobject/
 @ Author Daifallh Al-Otaibi <daif55@gmail.com>
*/
    class TObject{
        private $TOID;        // Table ID 
        private $TOName;    // Table Name 
        private $TOFields;    // Table Fields
        private $TOrder;    // Order Fields
        private $TOLimit;    // limit rows
        private $TOsql;    // SQL String
        private $TOVars = array('TOVars','TOID','TOName','TOFields','TOrder','TOLimit','TOsql');    // variables array

        function TObject($TOName,$TOID=null){
            $this->TOName = $TOName;
            if($field_q = mysql_query('DESC `'.$this->TOName.'`')){
                while($TOField = mysql_fetch_assoc($field_q)){
                    $TOField['Length'] = preg_replace('/.+\(([0-9]+)\)/','\\1',$TOField['Type']);
                    $TOField['Type'] = preg_replace('/\([0-9]+\)/','',$TOField['Type']);
                    $this->TOFields[$TOField['Field']] = $TOField;
                    $this->$TOField['Field'] = null;
                    if($TOField['Key'] == 'PRI') $this->TOID = $TOField['Field'];
                }
            } else {
                $this->error("Table: '{$this->TOName}' dosen't exist");
            }
            if($TOID) return($this->create($TOID));
        }
        //setter function
        function __set($var, $val){
            if(in_array($var,$this->TOVars)){
                $this->error("Variable: '$var' is readonly");
            }elseif(isset($this->TOFields[$var])){
                if(get_magic_quotes_gpc()) $val = stripslashes($val);
                $this->$var = mysql_escape_string($val);
            }else{
                $this->error("Variable: '$var' is not exist");
            }
        }
        //getter function
        function __get($var){
            if(in_array($var,$this->TOVars)){
                return(stripslashes($this->$var));
            }elseif(isset($this->TOFields[$var])){
                return(stripslashes($this->TOFields[$var]));
            } else {
                $this->error("Variable: '$var' is not exist");
                return(null);
            }
        }
        function primaryKey(){
            if($this->TOID){
                return($this->TOID);
            } else {
                $this->error("Table: '{$this->TOName}' without PrimaryKey");
                return(false);
            }
        }
        //Create Object
        function create($TOID){
            if($this->primaryKey()){
                if($TOID){
                    $this->TOsql  = 'SELECT * FROM `'.$this->TOName.'`';
                    $this->TOsql .=" WHERE `{$this->TOID}`='$TOID' LIMIT 1";
                    $TObject = mysql_fetch_assoc(mysql_query($this->TOsql));
                    if(is_array($TObject)){
                        foreach($TObject as $TOFieldName=>$TOFieldValue){
                            $this->$TOFieldName = $TOFieldValue;
                        }
                        return($this);
                    }else{
                        return(false);
                    }
                }
            }
            return(false);
        }
        //Fetch Object
        function fetch(){
            $this->limit(0,1);
            $TObjects = $this->find();
            $TObject = (is_array($TObjects))?$TObjects[0]:false;
            return($TObject);
        }
        //Order Object
        function order($TOrder,$TOsort='DESC'){
            if(is_array($TOrder) ){
                $TOrder =  implode(', ',array_map('mysql_escape_string',$TOrder));
                $this->TOrder = ' ORDER BY '.$TOrder.$TOsort;
            } elseif(!empty($TOrder)) {
                $this->TOrder = ' ORDER BY '.mysql_escape_string($TOrder.' ').$TOsort;
            }
        }
        //Limit rows
        function limit($TOffset,$TOCount=null){
            if(!empty($TOffset) && !empty($TOCount)){
                $this->TOLimit = ' LIMIT '. mysql_escape_string($TOffset) . ', '.  mysql_escape_string($TOCount);
            } elseif (!empty($TOffset)){
                $this->TOLimit = ' LIMIT '. mysql_escape_string($TOffset);
            }
        }
        //Find Object
        function find($TOrder=''){
            $this->TOsql = 'SELECT * FROM `'.$this->TOName.'`';
            foreach($this->TOFields as $TOFieldName=>$TOFieldValue){
                if($this->$TOFieldName !== '') $TOWhere[] = "`$TOFieldName`='{$this->$TOFieldName}'";
            }
            if(isset($TOWhere)) $this->TOsql .= ' WHERE '. implode(' AND ',$TOWhere);
            if($this->TOrder)    $this->TOsql  .= $this->TOrder;
            if($this->TOLimit)    $this->TOsql  .= $this->TOLimit;
            $TOQ = mysql_query($this->TOsql);
            while($TObject = mysql_fetch_assoc($TOQ)){
                $TObjects[] = $TObject; //$this->create($TObject[$this->TOID]);
            }
            if(isset($TObjects) && is_array($TObjects)){
                return($TObjects);
            }else{
                return(false);
            }
        }
        //Save Object
        function save(){
            return($this->insert());
        }
        //Save Object
        function insert(){
            if($this->{$this->TOID}){
                return($this->update());
            } else {
                foreach($this->TOFields as $TOFieldName=>$TOFieldValue){
                    $TONames[] = "`$TOFieldName`";
                    $TOValues[] = "'{$this->$TOFieldName}'";
                }
                $this->TOsql  = 'INSERT INTO `'.$this->TOName.'` ('.implode(' ,',$TONames).')';
                $this->TOsql .= ' VALUES ('.implode(' ,',$TOValues).')';
                if(mysql_query($this->TOsql)){
                    return(mysql_insert_id());
                }else{
                    print mysql_error();
                    return(false);
                }
            }
        }
        //Update Object
        function update(){
            if($this->primaryKey()){
                foreach($this->TOFields as $TOFieldName=>$TOFieldValue){
                    $TOValues[] = "`$TOFieldName`='{$this->$TOFieldName}'";
                }
                $this->TOsql  = 'UPDATE `'.$this->TOName.'` SET '.implode(' ,',$TOValues);
                $this->TOsql .= " WHERE {$this->TOID}='{$this->{$this->TOID}}' LIMIT 1";
                if(mysql_query($this->TOsql)){
                    return($this->{$this->TOID});
                }else{
                    print mysql_error();
                    return(false);
                }
            }
        }
        //Trigger Error
        function error($msg){
            trigger_error($msg, E_USER_WARNING);
        }
        //Destroy Object
        function destroy(){
            return(settype($this, 'null'));
        }
        //Delete Object
        function delete(){
            if($this->primaryKey()){
                $this->TOsql = 'DELETE FROM `'.$this->TOName." WHERE {$this->TOID}='{$this->{$this->TOID}}' LIMIT 1";
                mysql_query($this->TOsql);
                return($this->destroy());
            }
        }
}
// TObject wrapper function
function TObject($TOName,$TOID=null){
    return(new TObject($TOName,$TOID));
}
?>