dbConnect

Publicado por Lucas Vasconcelos 23/12/2004

[ Hits: 5.387 ]

Homepage: http://www.mma.com.br/~vasconcelos/

Download dbconnect-2.0b.tar.gz




Classe para conexao com banco de dados MySQL. Vem com uma classe para controle de erros. Foi inspirada na PEAR::DB.

  



Esconder código-fonte

<?php
// +-----------------------------------------------------------------------+
// | dbConnect 2                                                           |
// +-----------------------------------------------------------------------+
// | This program is free software; you can redistribute it and/or         |
// | modify it under the terms of the GNU General Public License           |
// | as published by the Free Software Foundation; either version 2        |
// | of the License, or any later version.                                 |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// |                                                                       |
// | You should have received a copy of the GNU General Public License     |
// | along with this program; if not, write to the Free Software           |
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
// | USA.                                                                  |
// +-----------------------------------------------------------------------+
// | Author: Lucas S. Vasconcelos                                          |
// +-----------------------------------------------------------------------+
//
// $Id dbconnect.class.php, v2.0b 2004/12/23 10:03:30 vasconcelos Exp $

// {{{ dbConnect

/**
 * A classe `dbConnect` foi construida com a intencao de prover
 * uma forma simples e poderosa de fazer acessar bancos de dados
 * baseados em MySQL.
 *
 * @version 2.0
 * @author Lucas S. Vasconcelos <sh4d0wn@gmail.com>
 * @link http://sh4d0wn.blogspot.com
 */
class dbConnect {
    
    // {{{ attributes
    
    var $error     = null;
    var $conn      = null;
    var $db_name   = 'test';
    var $num_query = 0;
    
    // }}}
    // {{{ dbConnect()
    
    /**
     * Constructor da classe. abre conexao com o servidor MySQL. Em caso
     * de erro retorna falso e instancia um objeto `dbError`.
     *
     * <code>
     *   <?php
     *   require 'dbconnect.class.php';
     *   
     *   $hdb =& new dbConnect('test');
     *
     *   if ( dbError::isError($hdb) ) {
     *       $hdb->getMessage();
     *   }
     *   
     *   ?>
     * </code>
     *
     * @access public
     * @param String $db_name
     * @param String $localhost
     * @param String $user
     * @param String $pass
     * @return mixed; Success return `dbConnect` Object
     *                Error return false
     * @see dbError::dbError()
     */
    function dbConnect($db_name, $host = 'localhost', $user = 'root', $pass = '')
    {
        if ( !$conn = @mysql_connect(&$host, &$user, &$pass) ) {
            $this->error =& new dbError(mysql_errno(), __FILE__, __LINE__, 'dbConnect::dbConnect()', mysql_error());
            return false;
        } else {
            $this->conn = $conn;
            $this->setDb($db_name);
        }
    }
    
    // }}}
    // {{{ query()
    
    /**
     * Este metodo retorna um objeto do tipo `dbResult`. Caso ocorra algum erro,
     * dentro do objeto `dbResult` sera criado um objecto do tipo `dbError` para
     * auxiliar o tratamento deste.
     *
     * <code>
     *   <?php
     *   // uma vez que $hdb seja o objeto `dbConnect`
     *   $result = $hdb->query("SELECT * FROM tabela");
     *   if (dbError::isError($result) {
     *       die($result->getMessage());
     *   }
     *   ?>
     * </code>
     *
     * @access public
     * @param String $query
     * @return Object dbResult
     * @see dbResult::dbResult()
     */
    function query($query)
    {
        $this->num_query++;
        if ( !$result = @mysql_query($query, $this->conn) ) {
            $err = 1;
        }
        
        return (new dbResult($result, $err));
    }
    
    // }}}
    // {{{ numQuery()
    
    /**
     * Retorna numero de querys executadas.
     *
     * @access public
     * @return Integer
     */
    function numQuery()
    {
        return $this->numQuery;
    }
    
    // }}}
    // {{{ close()
    
    /**
     * Fecha a conexao com a base de dados
     *
     * @access public
     * @return void
     */
    function close()
    {
        @mysql_close($this->conn);
    }
    
    // }}}
    // {{{ setDb()
    
    /**
     * Altera o Banco de Dados selecionado ou seleciona um ;-).
     * Em caso de erro como em todos os outros metodos e criado um
     * objeto `dbError`.
     *
     * @access public
     * @param String $db_name
     * @return void
     */
    function setDb($db_name)
    {
        if ( !@mysql_select_db($db_name, $this->conn) ) {
            $this->error =& new dbError(mysql_errno(), __FILE__, __LINE__, 'dbConnect::setDb()', mysql_error());
        } else {
            $this->db_name = $db_name;
        }
    }
    
    // }}}
    // {{{ getDb()
    
    /**
     * Retorna o nome do DB que esta sendo usado.
     *
     * @access public
     * @return String
     */
    function getDb()
    {
        return $this->db_name;
    }
    
    // }}}
    // {{{ getInfo()
    
    /**
     * Esta funcao retorna informacoes detalhadas sobre a ultima query.
     * Requer PHP 4 >= 4.3.0, PHP 5
     *
     * @access public
     * @return String
     * @link http://br2.php.net/mysql_info
     */
    function getInfo()
    {
        return @mysql_info();
    }
    
    // }}}
    // {{{ getLastId()
    
    /**
     * Retorna o ID do ultimo insert realizado. Isso é util para
     * voce nao precisar fazer um select depois de inserir algo no BD ^^
     *
     * @access public
     * @return mixed
     * @link http://br2.php.net/mysql_insert_id
     */
    function getLastId()
    {
        return @mysql_insert_id();
    }
    
    // }}}
}

// }}}
// {{{ defines

/**
 * Metodos padrao para retorno de array
 *
 * @see dbResult::getArray()
 */
define('DB_FETCHMODE_ROWS', '_fetchRows');
define('DB_FETCHMODE_ASSOC', '_fetchAssoc');
define('DB_FETCHMODE_OBJECT', '_fetchObject');

// }}}
// {{{ dbResult

/**
 * Esta classe foi criada na versao 2.0. Ela permite maior comodidade para
 * a manipulacao de resultados das suas consultas.
 *
 * @version 1.0
 * @author Lucas S. Vasconcelos <sh4d0wn@gmail.com>
 */
class dbResult {
    
    // {{{ attributes
    
    /**
     * Guarda o resource link de uma query
     *
     * @access private
     * @var resource
     */
    var $result = null;
    
    /**
     * Objeto do tipo `dbError`
     *
     * @access private
     * @var Object
     */
    var $error = null;
    
    // }}}
    // {{{ dbResult()
    
    /**
     * Caso tenha acontecido um erro a variavel `$err` sera `1` entao e instanciado
     * um objeto `dbError`.
     *
     * @access public
     * @param resource link $result
     * @param Integer $err
     * @return void
     */
    function dbResult($result, $err)
    {
        if ( isset($err) && ($err == 1) ) {
            $this->error =& new dbError(mysql_errno, __FILE__, __LINE__, 'dbConnect::dbQuery()', mysql_error());
        } else {
            $this->result = $result;
        }
    }
    
    // }}}
    // {{{ result()
    
    /**
     * Resupera o resultado de uma query. O parametro `$line` e opcional.
     * Sendo que o padrao e a linha `0`(a primeira linha da fila).
     *
     * @access public
     * @param String $field
     * @param Integer $line
     * @return mixed
     */
    function result($field, $line = 0)
    {
        if (! $result = @mysql_result($this->result, $line, $field)) {
            $this->error =& new dbError(mysql_errno, __FILE__, __LINE__, 'dbResult::result()', mysql_error());
            return false;
        } else {
            return $result;
        }
    }
    
    // }}}
    // {{{ rows()
    
    /**
     * Retorna o numero de linhas afetadas pela query.
     *
     * @access public
     * @return Integer
     */
    function rows()
    {
        return @mysql_num_rows($this->result);
    }
    
    // }}}
    // {{{ getArray()
    
    /**
     * Retorna um array com o resultado da query. Existem tres metodos
     * de retorno do array.
     * 
     * DB_FETCHMODE_ROWS   - Retorna um array com idices numericos
     * DB_FETCHMODE_ASSOC  - Retorna um array associativo
     * DB_FETCHMODE_OBJECT - Retorna um array de objetos
     *
     * O array retornado tem esta aparencia:
     *
     * <code>
     * ARRAY (
     *     [0] => ARRAY (
     *         [index] => [valor]
     *         [index] => [valor]
     *     )
     *     [1] => ARRAY (
     *         [index] => [valor]
     *         [index] => [valor]
     *     )
     * )
     * </code>
     *
     * Onde `index` e um objeto, um indicie ou uma string (nome do db).
     *
     * @access public
     * @param String $fetch_mode
     * @return Array
     */
    function getArray($fetch_mode = DB_FETCHMODE_ASSOC)
    {
        return $this->$fetch_mode();
    }
    
    // }}}
    // {{{ _fetchRows()
    
    /**
     * Gera array indexado com o resultado da query
     *
     * @access private
     * @return Array
     */
    function _fetchRows()
    {
        while ( $row = @mysql_fetch_row($this->result) ) $array[] = $row;
        return $array;
    }
    
    // }}}
    // {{{ _fetchAssoc()
    
    /**
     * Gera array indexado com o resultado da query
     *
     * @access private
     * @return Array
     */
    function _fetchAssoc()
    {
        while ( $row = @mysql_fetch_assoc($this->result) ) $array[] = $row;
        return $array;
    }
    
    // }}}
    // {{{ _fetchObject()
    
    /**
     * Gera array indexado com o resultado da query
     *
     * @access private
     * @return Array
     */
    function _fetchObject()
    {
        while ( $row = @mysql_fetch_object($this->result) ) $array[] = $row;
        return $array;
    }
    
    // }}}
    
}

// }}}
// {{{ dbError

/**
 * Esta classe e responsavel pelo tratamento de erros do sistema. Permite
 * acesso estatico a alguns metodos. Ainda nao esta concluida.
 *
 * @version 1.0a
 * @author Lucas S. Vasconcelos <sh4d0wn@gmail.com>
 */
class dbError {
    
    // {{{ attributes
    
    /**
     * Numero do erro MySQL
     *
     * @access private
     * @var Integer
     * @see mysql_errno()
     * @link http://br2.php.net/mysql_errno
     */
    var $num_error = -1;
    
    /**
     * Nome do arquivo em que o erro foi gerado
     *
     * @access private
     * @var String
     */
    var $file_name;
    
    /**
     * Numero da linha que aconteceu o erro
     *
     * @access private
     * @var Integer
     */
    var $line_num;
    
    /**
     * Menssagem de erro do MySQL
     *
     * @access private
     * @var String
     */
    var $menssage;
    
    /**
     * Nome do metodo que gereou o erro
     *
     * @access private
     * @var String
     */
    var $method;
    
    /**
     * Data/Hora no formato unix timestamp
     *
     * @access private
     * @var Integer
     */
    var $now;
    
    // }}}
    // {{{ dbError()
    
    function dbError($mysql_errno, $file, $line, $method, $mysql_err)
    {
        $this->now       = time();
        $this->num_error = $mysql_errno;
        $this->file_name = $file;
        $this->line_num  = $line;
        $this->method    = $method;
        $this->message   = $mysql_err;
        
        $this->saveLog();
    }
    
    // }}}
    // {{{ isError()
    
    function isError($obj)
    {
        if (is_object($obj->error) && isset($obj->error->num_error)) {
            //echo 'verdadeiro';
            return true;
        } else {
            //echo 'falso';
            return false;
        }
    }
    
    // }}}
    // {{{ getMessage()
    
    /**
     * Este metodo sera acessado estaticamente. Ele retorna a menssagem de erro
     * formatada. Esta menssagem pode ser salva em um arquivo de log ou exibida
     * da saida.
     *
     * @access public
     * @return String
     */
    function getMessage($obj)
    {
        $message = '
        ['.date("d/m/Y", $obj->error->now).'] Error! ('.$obj->error->num_error.') on file '.$obj->error->file_name.'['.$obj->error->line_num.']'."\n"
        .$obj->error->method.': '.$obj->error->message;
        
        return $message;
        
    }
    
    // }}}
    // {{{ redirect()
    // TODO: a construir
    // }}}
    // {{{ saveLog()
    
    // TODO: a construir
    function saveLog()
    {
    }
    
    // }}}
    
}

// }}}

?>

Scripts recomendados

Agenda eletrônica

Portal dh4v01

Conexão PostgreSQL

Pesquisando em MySQL

Retornando aniversariantes do mês


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts