Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Classe de conexao com mysql (normal)
debugger personalizado e mensagens preparadas e esse script foi feito para ser usado com o PHP5 e Mysql acima do 4.1
na opção $msg_erro = true; você pode deixar em false dai nao vai aparecer a mensagem de erro e se deixar em true vai aparece a mensagem de erro é bom para debugger e ele mostra ate mensagens de erro na sintaxe SQL se a sintaxe basica SQL estiver certa aparece em azul se tiver errado aparece em vermelho exemplo: [selects * from tabela]
essa versao é +- um demo do que eu fiz para a empresa que eu trabalho pois aqui o debugger grava um log de erro e manda um email pro admin,com mais recursos
bom fica a ideia pra quem quiser complementar ele
bom aproveito pessoal qualquer duvida ou sujestao postem ai
conecta.php
PHP
-
-
php
-
-
-
- var $conexao = "";
- var $msg_erro = true;
-
- @$this->conexao = mysql_connect( $this->obj['servidor'] ,
- $this->obj['usuario'] ,
- $this->obj['senha']
- );
-
- echo "Mysql_Error(2005) Servidor nao foi encontrado **["****.****$this****->obj[****"servidor"****].****"]**";
- exit;
-
- echo "Mysql_Error(1045) Nome ou Senha invalidos";
- exit;
-
- echo "Mysql_Erro(1049) Banco **["****.****$this****->obj[****"banco"****]. ****"**] nao foi encontrado";
- exit;
-
- return mysql_close($this->conexao);
-
- $this->Abrir();
- $re = @mysql_query($sql);
- $this->checa_query($sql);
- $this->Fechar();
- return $re;
-
- $erro = mysql_error();
- $arr = explode("'", $erro);
- $tabela = explode(".", $arr[1]);
- echo "Essa tabela **[ "****.****$tabela****[1].****" ]** não existe!";
- exit();
-
- echo "Existe algum campo com nome errado";
- exit();
-
";
- $sql = preg_replace(sql_regcase("/(select|insert|delete|drop table|alter table|from|where|limit|\*|order by|group by)/"),"\\1",$sql);
- echo "$msg [$sql]";
- exit();
-
-
?>
modo de usar:
include "conecta.php"
$con = new ComandoSql();
$re = $con->Executar("select * from tabela");Entao o correto uso do @ é para ocultar mensagens de erros, mas só use assim em caso de você nao querer que o ususario veja um possivel erro dai você mostra uma mensagem personalizada mas nao use isso pra esconder erros, e sim para esse fim que eu te falei
um exemplo simples é por exemplo você faz um script correto mas pra ele funcionar muitas vezes nao depende de você com no caso se o servidor mysql der algum problema entao quando o script tentar conectar iria aparecer uma mensgame de erro na tela, mas o usuario poderia pensar que erra um erro seu de programação por isso você esconde esse possivel erro e se quiser mostrar uma mensagem e ainda envia um email pro admin sobre o erro
Agora sim !! Muito Obrigado !!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Fábio,
Tiro a chapéu pra ti nessa classe. . .mandou muito bem velho, parabéns!!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
Abraços!!
DEUS Abençoe!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Prefiro usar o bom e VELHO
mysql_connect("localhost", "usuario", "senha");mysql_select_db("banco")
oi fabyo beleza de script,
mas não estou usando corretamente:
$con = new ComandoSql();$re = $con->Executar("select * from tabela");while ($n=mysql_fetch_array($re)){ // funciona mas da um erro: argumento invalido// qual seria a forma correta de usar.//quando fiz para exibir por categoria, só exibiu o produtos referente a ultima categoria.}
desde ja muito obrigado.
vou postar um script melhor, esse script que eu vou postar nao esta 100% terminado, porque depois que abandonei o php4 fiquei mechendo só com o php5 e classes para php5 é outra coisa, mas essa classe ta legalzinha ainda mais por ser simples e para php4 , ela acaba sendo util para quem quer aprender e começar a mecher com oop
só explicando uma coisa que vejo sempre, muitos programadores falam que faz uma classe de conexao, mas quando voce vai ver a classe nao tem nada de oop, o que ele fez foi jogar as funções dentro de classe
outra coisa se voce faz uma classe de conexao mas o resultado da query nao continua em objeto entao sua classe nao ajuda muito exemplo do que eu to falando
exemplo errado:
> $db = new Classe();$res = $db->Query("select * from tabela");
while($l = mysql_fetch_array($res)) {
}
como pode ver em destaque acabei fugindo da orientação a objeto
o certo seria:
> $db = new Classe();$res = $db->Query("select * from tabela");
while($l = $res->fetch_array($res)) {
}
percebeu a diferença?, como minha classe que voce tava usando é antiga por isso to postando uma nova para voce ver a diferença, mas muita gente ainda faz classe daquele jeito errado.
bom chega de papo e vou postar minha classe que ta boazinha ma é antiga e php4(credo odeio usar var nas classes)
<?php
class Re
{
var $re;
var $array;
function Re($re) $this->re = $re;
}
function FetchRow() return mysql_fetch_array($this->re);
}
function GetOne() $re = mysql_fetch_array($this->re);
reset($re);
return (string) current($re);
}
function GetRow() $re = mysql_fetch_array($this->re);
$keys = count(array_keys($re));
return array_slice($re, 0, $keys);
}
function Close() @mysql_free_result($this->re);
}
function NumRows() return @mysql_num_rows($this->re) > 0 ? @mysql_num_rows($this->re) : false;
}
}
class Mysql
{
var $conexao;
var $error;
var $db_config;
var $re;
var $sql;
var $last_id;
var $record;
var $fields;
var $status;
var $affected_row;
function Mysql() $this->db_config = func_get_args();
} else {
$this->db_config[0] = defined("SERVIDOR") ? SERVIDOR : "";
$this->db_config[1] = defined("USUARIO") ? USUARIO : "";
$this->db_config[2] = defined("SENHA") ? SENHA : "";
$this->db_config[3] = defined("BANCO") ? BANCO : "";
}
$this->Open();
}
function Open() if(!isset($this->status)) {
$this->conexao = @mysql_connect($this->db_config[0], $this->db_config[1], $this->db_config[2]);
if (is_resource($this->conexao)) {
if(mysql_errno() == 0) {
if(!@mysql_select_db($this->db_config[3], $this->conexao)) {
$this->error = "Nao foi possivel conectar no banco de dados <b>\"" . $this->db_config[3] . "\"</b>";
$this->status = false;
$this->error = "Conexao falhou, verifique os dados de conexao";
} else {
$this->status = true;
}
}
} else {
$this->status = false;
$this->error = "Conexao falhou, verifique os dados de conexao";
}
}
return $this->status;
}
function Execute($sql) if(!$this->status) {
$this->Open();
}
$this->sql = $sql;
$this->re = @mysql_query($this->sql, $this->conexao);
if (!$this->re) {
$this->error = "Erro na execução da query ". mysql_error();
$this->status = false;
} else {
return new Re($this->re);
}
}
function Close() if($this->status) {
$this->status = false;
@mysql_close($this->conexao);
unset($this->conexao);
}
}
function ShowErrors() return $this->error;
}
function Insert($tabela, $dados) return false;
}
$campos = implode(array_keys($dados), ',');
$valores = "'".implode("','", array_values($this->EscapeString($dados)))."'";
$this->sql = "INSERT INTO $tabela ($campos) VALUES ($valores)";
$this->re = $this->Execute($this->sql);
if($this->re) {
$this->last_id = @mysql_affected_rows($this->conexao);
return $this->last_id;
} else {
$this->error = "[" . mysql_errno() . "]" . mysql_error();
}
}
function Update($tabela, $dados, $where) return false;
}
$fields = array_keys($dados);
$values = array_values($dados);
$i = 0;
$this->sql = "UPDATE $tabela SET ";
while($fields[$i]){
if($i < 0){
$this->sql.=", ";
}
$this->sql .= $fields[$i]." = '".$values[$i]."'";
$i++;
}
$this->sql .= " WHERE $where";
$this->re = $this->Execute($this->sql);
if($this->re) {
return true;
} else {
$this->error = "[" . mysql_errno() . "]" . mysql_error();
}
}
function Affected_row() $this->affected_row = @mysql_affected_rows($this->conexao);
return $this->affected_row;
}
function InsertID() $this->InsertID = @mysql_insert_id($this->conexao);
return $this->last_id;
}
function EscapeString($value) $campos = array_keys($value);
$valores = array_values($value);
for($i = 0; $i < count($value); $i++) {
$arr[$campos[$i]] = mysql_escape_string($valores[$i]);
}
return $arr;
} else {
if( $value == '' ) {
$value = 'NULL';
}
if( !is_numeric($value) || $value[0] == '0' ) {
if( get_magic_quotes_gpc() ) {
$value = stripslashes($value);
}
$value = mysql_escape_string($string);
}
return $value;
}
}
}
?>
Modo de usar:
//$db = new Mysql("localhost", "usuario", "senha", "banco");
/* ou no lugar de passar a string de conexao eu posso usar um arquivo de configuração
exemplo:
config.php:
<?php
define("SERVIDOR", "localhost");
define("USUARIO", "usuario");
define("SENHA", "senha");
define("BANCO", "banco");
?>
e incluir o config no script e usar assim:
$db = new Mysql();
*/
Inserir dados:
$db = new Mysql();
//teste se ta tudo ok ate aqui
if(!$db->ShowErrors()) {
//passo o nome do campo e o valor no caso o dado vindo de um formulario por exemplo
$dados = array("campo" => "valor1", "campo2" => "valor2");
$db->Insert("tabela", $dados); echo $db->Affected_row();
}
}
//fecho o banco de dados;
$db->Close();
Selecionando dados:
$db = new Mysql();
$re = $db->Execute("select * from tabela");
if(!$db->ShowErrors()) {
while($l = $re->FetchRow()) {
echo $l["campo"];
}
//libero a memoria do resource
$re->Close();
//fecho o banco de dados;
$db->Close();
}
tem outros metodos que voce tbm como Update() e voce pode ver outros metodos tbm, uma dica use get_class_methods() para voce saber quais metodos existem uma classe
só nao crio um tutorial descente para essa classe, porque pra mim ela esta obsoleta.
mas se voce usa php4 ela pode ser muito util ainda.
olha la ... quem disse que não da pra fazer coisa legal com o php4 :Dta show de bola ...só uma coisa eu não curti ... foi um método dentro do construtor ! o método open!
eu usei o metodo open para continuar sendo automatico assim que extanciar a classe ele ja conectaria, mas tbm nao faço mais assim eu abro a conexao dentro do metodo Execute, alias eu fico sempre mudando nunca socego com o mesmo script
= )
mas de qq jeito, ta de parabens !
eu usei o metodo open para continuar sendo automatico assim que extanciar a classe ele ja conectaria, mas tbm nao faço mais assim eu abro a conexao dentro do metodo Execute, alias eu fico sempre mudando nunca socego com o mesmo script = )
Bacana, Fabyo. Parabéns ! Só lembrando o pessoal: Usem o PHP 5, usando OOP com PHP 4 perdemos muitos recursos, como por exemplo -- Construtores, Visibilidade, Exceções Usar o método getTrace*() para localização rápida do erro, interfaces, classes abstratas, moficadores ...--- edit ---Chegará um dia em que todos os hosts oferecerão suporte ao PHP 5 ?
Bacana, Fabyo. Parabéns ! Só lembrando o pessoal: Usem o PHP 5, usando OOP com PHP 4 perdemos muitos recursos, como por exemplo -- Construtores, Visibilidade, Exceções Usar o método getTrace*() para localização rápida do erro, interfaces, classes abstratas, moficadores ...--- edit ---Chegará um dia em que todos os hosts oferecerão suporte ao PHP 5 ?
espero que sim !!!!
oi desculpa minha icompetencia mas não uso php4 uso php5. num sei das quantas:
e tentei por o modo correto qu você ensinou e num deu certo. nem apareceu o s resultados:
<?php $con = new ComandoSql();$re = $con->Executar("select * from menu_vert group by categ_menu asc"); while($n = $re->mysql_fetch_array($re)){// usei assim tbm: while($n = $re->fetch_array($re))$categ_menu = $n['categ_menu']; echo " $categ_menu <br />"; $con = new ComandoSql();$re2 = $con->Executar("select * from menu_vert where categ_menu= '$categ_menu' order by id_menu"); while($l = $re2->mysql_fetch_array($re2)){$id_menu = $l['id_menu'];$menu = $l['menu'];$link_menu = $l['link_menu'];echo "$id_menu - $menu = $link_menu || <a href=\"up_menu.php?id_menu=$id_menu\">Alterar</a> || <a href=\"del_menu.php?id_menu=$id_menu\">Excluir</a> <br />";}} ?>obrigadoFabyo,mai uma coisinha que queria entender:sempre que vejo alguma classe tem essa variavel(?):$this -> + alguma coisa //você poderia explicar o tal "$this ->" ou melhor indicar um link com um conteúdo completo.Mais uma vez obrigado
entao, o $this-> serve para referenciar algum método ou atributo da classe atual ....
ou seja ... na prática: teriamos o seguinte
class Pessoa{ private $nome; public function __construct($nome) { $this->nome=$nome; // usando o $this-> para referenciar o atributo nome da classe Pessoa } public function getNome(){ return $this->nome; } public function setNome($nome){ $this->nome=$nome; }}podemos dizer que é um operador de escopopcdesign foi falta de atenção sua lembra, olha que eu falei no topico, se voce quisesse saber os nomes dos metodos de uma classe use: get_class_methods()
meu metodo se chama FetchRow() é só reparar no exemplo que eu deixei na pagina
puts! foi mal Fabyo é minha mania de ler o começo e adivinha o resto.desculpa a falta de atenção e obrigado você e o void pela nobre atenção.
>
vou postar um script melhor, esse script que eu vou postar nao esta 100% terminado, porque depois que abandonei o php4 fiquei mechendo só com o php5 e classes para php5 é outra coisa, mas essa classe ta legalzinha ainda mais por ser simples e para php4 , ela acaba sendo util para quem quer aprender e começar a mecher com oop
só explicando uma coisa que vejo sempre, muitos programadores falam que faz uma classe de conexao, mas quando voce vai ver a classe nao tem nada de oop, o que ele fez foi jogar as funções dentro de classe
outra coisa se voce faz uma classe de conexao mas o resultado da query nao continua em objeto entao sua classe nao ajuda muito exemplo do que eu to falando
exemplo errado:
>
$db = new Classe();
$res = $db->Query("select * from tabela");
while($l = mysql_fetch_array($res)) {
}
como pode ver em destaque acabei fugindo da orientação a objetoo certo seria:
>
$db = new Classe();
$res = $db->Query("select * from tabela");
while($l = $res->fetch_array($res)) {
}
percebeu a diferença?, como minha classe que voce tava usando é antiga por isso to postando uma nova para voce ver a diferença, mas muita gente ainda faz classe daquele jeito errado.
bom chega de papo e vou postar minha classe que ta boazinha ma é antiga e php4(credo odeio usar var nas classes)
<?phpclass Re{ var $re; var $array; function Re($re) { $this->re = $re; } function FetchRow() { return mysql_fetch_array($this->re); } function GetOne() { $re = mysql_fetch_array($this->re); reset($re); return (string) current($re); } function GetRow() { $re = mysql_fetch_array($this->re); $keys = count(array_keys($re)); return array_slice($re, 0, $keys); } function Close() { @mysql_free_result($this->re); } function NumRows() { return @mysql_num_rows($this->re) > 0 ? @mysql_num_rows($this->re) : false; }}class Mysql{ var $conexao; var $error; var $db_config; var $re; var $sql; var $last_id; var $record; var $fields; var $status; var $affected_row; function Mysql() { if(func_num_args() == 4) { $this->db_config = func_get_args(); } else { $this->db_config[0] = defined("SERVIDOR") ? SERVIDOR : ""; $this->db_config[1] = defined("USUARIO") ? USUARIO : ""; $this->db_config[2] = defined("SENHA") ? SENHA : ""; $this->db_config[3] = defined("BANCO") ? BANCO : ""; } $this->Open(); } function Open() { if(!isset($this->status)) { $this->conexao = @mysql_connect($this->db_config[0], $this->db_config[1], $this->db_config[2]); if (is_resource($this->conexao)) { if(mysql_errno() == 0) { if(!@mysql_select_db($this->db_config[3], $this->conexao)) { $this->error = "Nao foi possivel conectar no banco de dados <b>\"" . $this->db_config[3] . "\"</b>"; $this->status = false; $this->error = "Conexao falhou, verifique os dados de conexao"; } else { $this->status = true; } } } else { $this->status = false; $this->error = "Conexao falhou, verifique os dados de conexao"; } } return $this->status; } function Execute($sql) { if(!$this->status) { $this->Open(); } $this->sql = $sql; $this->re = @mysql_query($this->sql, $this->conexao); if (!$this->re) { $this->error = "Erro na execução da query ". mysql_error(); $this->status = false; } else { return new Re($this->re); } } function Close() { if($this->status) { $this->status = false; @mysql_close($this->conexao); unset($this->conexao); } } function ShowErrors() { return $this->error; } function Insert($tabela, $dados) { if(!is_array($dados)) { return false; } $campos = implode(array_keys($dados), ','); $valores = "'".implode("','", array_values($this->EscapeString($dados)))."'"; $this->sql = "INSERT INTO $tabela ($campos) VALUES ($valores)"; $this->re = $this->Execute($this->sql); if($this->re) { $this->last_id = @mysql_affected_rows($this->conexao); return $this->last_id; } else { $this->error = "[" . mysql_errno() . "]" . mysql_error(); } } function Update($tabela, $dados, $where) { if(!is_array($dados)) { return false; } $fields = array_keys($dados); $values = array_values($dados); $i = 0; $this->sql = "UPDATE $tabela SET "; while($fields[$i]){ if($i < 0){ $this->sql.=", "; } $this->sql .= $fields[$i]." = '".$values[$i]."'"; $i++; } $this->sql .= " WHERE $where"; $this->re = $this->Execute($this->sql); if($this->re) { return true; } else { $this->error = "[" . mysql_errno() . "]" . mysql_error(); } } function Affected_row() { $this->affected_row = @mysql_affected_rows($this->conexao); return $this->affected_row; } function InsertID() { $this->InsertID = @mysql_insert_id($this->conexao); return $this->last_id; } function EscapeString($value) { if( is_array($value) ) { $campos = array_keys($value); $valores = array_values($value); for($i = 0; $i < count($value); $i++) { $arr[$campos[$i]] = mysql_escape_string($valores[$i]); } return $arr; } else { if( $value == '' ) { $value = 'NULL'; } if( !is_numeric($value) || $value[0] == '0' ) { if( get_magic_quotes_gpc() ) { $value = stripslashes($value); } $value = mysql_escape_string($string); } return $value; } } }?>Modo de usar:
//$db = new Mysql("localhost", "usuario", "senha", "banco");/* ou no lugar de passar a string de conexao eu posso usar um arquivo de configuração exemplo:config.php:<?phpdefine("SERVIDOR", "localhost");define("USUARIO", "usuario");define("SENHA", "senha");define("BANCO", "banco");?>e incluir o config no script e usar assim:$db = new Mysql();*/
Inserir dados:
$db = new Mysql();//teste se ta tudo ok ate aquiif(!$db->ShowErrors()) { //passo o nome do campo e o valor no caso o dado vindo de um formulario por exemplo $dados = array("campo" => "valor1", "campo2" => "valor2"); $db->Insert("tabela", $dados); //teste se deu certo e verifico se a gravação teve sucesso if(!$db->ShowErrors()) { echo $db->Affected_row(); } }//fecho o banco de dados;$db->Close();
Selecionando dados:
$db = new Mysql();$re = $db->Execute("select * from tabela");if(!$db->ShowErrors()) { while($l = $re->FetchRow()) { echo $l["campo"]; } //libero a memoria do resource $re->Close(); //fecho o banco de dados; $db->Close();}
tem outros metodos que voce tbm como Update() e voce pode ver outros metodos tbm, uma dica use get_class_methods() para voce saber quais metodos existem uma classe
só nao crio um tutorial descente para essa classe, porque pra mim ela esta obsoleta.
mas se voce usa php4 ela pode ser muito util ainda.
Fabyo, você tem essa classe criada para o php5 ?
Se tiver teria como disponibilizar ela aqui.
Valeu...
Renato
Eu faço uma mais simples e padrao e posto aqui.
Olá Fábyo. a um tempo atras eu tinha dúvida se você já tinha essa classe em PHP5..Você já tem ela em PHP5 ? Ou alguma classe nesse estilo que você use com o PHP5 ?Valeu...Renato
Tenho sim, vou postar ela ate segunda, classe para PHP5 e mysqli, com design pattern
Pow, cadê a classe....?.......
Pow, cadê a classe....?.......
Ola Fabyo!Tenho uma duvida... ja reparei que alguns scripts fazem isso as vezes, mas nunca entendi o porque, tentei procurar em foruns e no manual e nao achei (se tiver no manual, onde fica?). Seguinte, o ' @ ' antesde variaveis e funcoes server para que ?Grato!