Tema: Para el foro
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/12/2004, 17:39
Avatar de sism82
sism82
 
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 23 años
Puntos: 1
Esta clase me sirvió para mis propósitos durante un tiempo que use sqlite, se puede cambiar facilmente para ser usada con mysql. Espero te sirva para darte una guía

Código PHP:
<?php
/********************* dbLink ******************/
/*
this class make all the querys to the database
*/
class dbLink {

    public static 
$data_type          = array();
    public static 
$codes                = array();
    public          
$errors               = array();
    public          
$query_resource = false;
    public static 
$linkId                = false;
    public          
$dbName            = '/var/log/asterisk/cdr.db';
    public          
$logFile               = '/var/log/asterisk/econovoice/database.iss';    
    
    
    public function 
__construct() {
        
//sets the time header format, and other info stuff
        
$this->dateHeader = date('[Y - m - d / H : i : s]')."\n";
        
$this->document   = $_SERVER['PHP_SELF'];
                
        
//set the error codes
        
$this->codes['errors']    = array();
        
$this->codes['errors'][0] = 'Sin errores.';
        
$this->codes['errors'][1] = 'No fu&eacute; posible realizar la conexi&oacute;nn a la base de datos. Revise su configuraci&oacute;n.';
        
$this->codes['errors'][2] = 'No fu&eacute; posible abrir el archivo "database.iss". Contacte a soporte t&eacute;cnico.';
        
$this->codes['errors'][3] = 'No fu&eacute; posible escribir el archivo "database.iss". Contacte a soporte t&eacute;cnico.';
        
$this->codes['errors'][4] = 'No fu&eacute; posible consultar la base de datos. Contacte a soporte t&eacute;cnico.';
        
        
//set database types regular expressions
        
$this->data_type['NUM']    = '[0-9]+|[0-9]\.[0-9]+';
        
$this->data_type['TXT']    = '.*';
        
$this->data_type['EMAIL']  = '^[0-9a-z\.\_\-]+@[0-9a-z\.\_\-]+(\.[a-z])*$';
        
$this->data_type['PHONE']  = '^[0-9\(\)\-]+$';
        
$this->data_type['DATE']   = '^[0-9]{4}[\-/][0-9]{2}[\-/][0-9]{2}$';
        
$this->data_type['PASS']   = '^.{6,15}$';
        
$this->data_type['ARRAY']  = '^.*$';
        
        
//open the database connection
        
$this->connect2DB();
        return 
true;
    }
    
    
//make the connection
    
public function connect2DB($db = "") {
        
$log  = array();
        
$db   = $db == "" ? $this->dbName : $db;
        
$link = file_exists($db) ? @sqlite_open($db) : false;
        if ( 
$link ) {
            
$this->linkId = $link;
            return 
true;
        } else {
                
$this->errors[] = 1;
                
$log['error'] = $this->codes['errors'][1];
                
$this->writeLog($log);
                return 
false;
        }
    }
    
    
//make a query
    
public function sqlQuery($sql) {
        
$sql  = get_magic_quotes_gpc() === 1 ? $sql : addslashes($sql);
        
$rss  = @sqlite_query($this->linkId,$sql);
        if ( 
$rss !== false ) {
            
$this->query_resource = $rss;
            return 
$rss;
        } else {
            
$error_code      = @sqlite_last_error($this->linkId);
            
$this->errors[]  = 4;
            
$log['SQLQuery'] = $sql;
            
$log['SQLCode']  = $error_code;
            
$log['SQLError'] = @sqlite_error_string($error_code);
            
$this->writeLog($log);
            return 
false;
        }
    }
    
    
//get the last query data
    
public function getRssData($rss = false) {
        
$rss = $rss !== false ? $rss : $this->query_resource;
        if ( 
$rss === false ) {
            return 
false;
        } else {
            
$obj = @sqlite_fetch_object($rss);
            return 
is_object($obj) ? $obj : false;
        }
    }
    
    
//get the rows of the last query
    
public function getRowsNumber($rss = false) {
        
$rss = $rss !== false ? $rss : $this->query_resource;
        if ( 
$rss === false ) {
            return 
false;
        } else {
            return 
sqlite_num_rows($rss);
        }
    }
    
    
//initialize the internal result pointer of the last result, or a specific one
    
public function rewindResults($rss = false) {
        
$rss = $rss !== false ? $rss : $this->query_resource;
        if ( @
sqlite_rewind($rss) ) {
            return 
true;
        } else {
            return 
false;
        }
    }
    
    
//get the last id of an INSERT query
    
public function getLastId($rss = false) {
        
$rss = $rss !== false ? $rss : $this->query_resource;
        if ( 
$rss === false ) {
            return 
false;
        } else {
            
$ret = sqlite_last_insert_rowid($rss);
            return 
$ret;
        }
    }
    
    
//get the last id of a certain table
    
public function getLastIdFromTable($table,$field = 'id') {
        
$sql = "SELECT MAX(".$field.") AS lastone FROM ".$table."";
        
$rss = sqlite_query($this->linkId,$sql);
        
$obj = sqlite_fetch_object($rss);
        return 
$obj->lastone;
    }
    
    
//get a field value
    
public function getFieldValue($field, $table, $conditions = "") {
        
$where = $conditions != "" ? " WHERE ".$conditions : "";
        
$sql   = "SELECT ".$field." AS returnValue FROM ".$table.$where;
        
$sql   = get_magic_quotes_gpc() ? $sql : addslashes($sql);
        
$rss   = @sqlite_query($this->linkId,$sql);
        if ( 
$rss !== false ) {
            
$obj   = @sqlite_fetch_object($rss);
            
$value = is_object($obj) ? $obj->returnValue : false;
            return 
$value;
        } else {
            
$error_code      = @sqlite_last_error($this->linkId);
            
$this->errors[]  = 4;
            
$log['SQLQuery'] = $sql;
            
$log['SQLCode']  = $error_code;
            
$log['SQLError'] = @sqlite_error_string($error_code);
            
$this->writeLog($log);
            return 
false;
        }
    }
    
    
//writes a log if errors in the database querys
    
public function writeLog($logInfo = array()) {
        
$rs = @fopen($this->logFile,'a+');
        if ( 
$rs !== false )  {
            
$log  = $this->dateHeader;
            
$log .= "Documento: ".$this->document."\n";
            
$log .= "Error Codes: ".serialize($this->errors)."\n";
            foreach ( 
$logInfo as $var => $value ) {
                
$log .= $var." = ".$value."\n";
            }
            
$log .= "\n\n";
            
$writed = @fwrite($rs,$log);
            if ( 
$writed !== false ) {
                @
fclose($rs);
                return 
true;
            } else {
                
$this->errors[] = 3;
                return 
false;
            }
        } else {
            
$this->errors[] = 2;
            return 
false;
        }
    }
    
    
//there are errors??
    
public function noSqlErrors() {
        if ( empty(
$this->errors) ) {
            return 
true;
        } else {
            return 
false;
        }
    }
    
    
//cut last chars of a string
    
public function stripLastChars($string, $offset = 2) {
        
$strlen = strlen($string);
        
$strcut = $strlen - $offset;
        
$substr = substr($string,0,$strcut);
        return 
$substr;
    }
    
    
//get the string errors
    
public function getLinkErrors() {
        
$error_string = "";
        foreach (
$this->errors as $ix => $code ) {
            
$error_string .= '<br /> :: '.$this->codes['errors'][$code].'<br />';
        }
        return 
$error_string;
    }
    
    
//close the connection
    
public function __destruct() {
        @
sqlite_close($this->linkId);
        return 
true;
    }
    
}
?>