dbConnect
Publicado por Lucas Vasconcelos 23/12/2004
[ Hits: 5.374 ]
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.
<?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() { } // }}} } // }}} ?>
Pesquisando em PostGreSQL [golfinho/Elefante]
Retornando aniversariantes do mês
NOTÍCIAS ATUALIZADAS E PERSONALIZADAS!
Classe para trabalhar com SQL Server
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Instalação Uefi com o instalador clássico do Mageia (1)
Vou voltar moderar conteúdos de Dicas e Artigos (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta