dbConnect

Publicado por Lucas Vasconcelos 23/12/2004

[ Hits: 5.234 ]

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

Loja

Contador de Visitas PHP/MYSQL

Classe de conexao com banco de dados mysql

Agenda eletrônica

Classe básica de acesso a MySQL pronta para extensões


  

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