Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

osk

[Resolvido] Classe Mysql

Recommended Posts

Achei este escript feito aqui mesmo.

Mas tenho um problema que não estou conseguindo resolver:

 

Quando chamao a consulta o $db já esta definido, como podem ver abaixo.

 

Mas gostaria que em cada pagina de consulta atribuisse um $db diferente e não sempre o mesmo. Pq tenho um banco para cada tipo, como clientes-admin etc.

 

<?php
/*
* Classe de Conexao com MySQL
* =====================
* por Felipe Rezende 
* =====================
* Descricao: Classe que
* que realiza conexao com o banco
* de dados. */

// verificacao de seguranca
$checkurl = $_SERVER["PHP_SELF"];
if (eregi("includes/mysql.php", "$checkurl")) {
        header ("Location: ../index.php");
}

class MySQL {
        // edite aqui
        var $host = "localhost";
        var $user = "";
        var $pass = "";
        var $db   = "admin";

        // nao edite as vars abaixo
        var $query;
        var $link;
        var $result;
        
        /**
        * @return MySQL
        * @desc Construtor da classe MySQL.
        */
        function MySQL(){
        }
        /**
        * @return void
        * @desc Método que Conecta ao Servidor e seleciona Banco de Dados.
        */
        function connect(){
                $this->link = mysql_connect($this->host,$this->user,$this->pass);
                if(!$this->link){
                        echo "Erro na Conexão.<br>"
                                ."<b>MySQL retornou: </b> ".mysql_error()."<br>";
                        die();
                } elseif (!mysql_select_db($this->db,$this->link)){
                        echo "Erro na seleção do Banco de Dados.<br>"
                                ."<b>MySQL retornou: </b> ".mysql_error()."<br>";
                        die();
                }
        }
        /**
        * @return Resultado
        * @param String $query
        * @desc Recebe query SQL, executa e retorna resultado, se houver erro retorna 0.
        */
        function sql($query){
                $this->connect();
                $this->query = $query;
                if($this->result=mysql_query($this->query)){
                        $this->disconnect();
                        return $this->result;
                } else {
                        die("Ocorreu um erro ao executar a Query SQL abaixo:<br>$query<<br><br><b>MySQL Retornou: ".mysql_error()."<b>");
                        $this->disconnect();
                }
                
        }
        /**
        * @return mysql_close
        * @desc Desconecta do servidor
        */
        function disconnect(){
                return mysql_close($this->link);
        }
}
?>

Aqui e como chamo a função:

 

<?php


// Cria Obejto
$mySQL = new MySQL(); 

// Executa uma query
$result = $mySQL->sql("SELECT * FROM admin ORDER BY id");

// Exibe informações
while ($dados = mysql_fetch_array($result)){

echo "
<table width='100%' border='0'>
        <tr>
          <td width='120' bgcolor='#F0F0F0'><div align='left'>".$dados['id']."</div></td>
          <td width='180' bgcolor='#F0F0F0'><div align='left'>".$dados['login']."</div></td>
          <td width='200' bgcolor='#F0F0F0'><div align='left'>".$dados['senha']."</div></td>
          <td bgcolor='#F0F0F0'><div align='left' >".$dados['email']."</div></td>
        </tr>
      </table>

";		
		
		}

?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

com quantos bancos de dados diferentes você pretende trabalhar em uma aplicação?

 

 

Na verdade um por vez.

 

Pq so quero que mostre os clientes, ou admins, ou produtos individual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

intão não precisa ficar alterando o $db, defina ele com o nome do banco de dados.. depois coloque na sua consulta SQL as tabelas que deseja consultar..

 

EX.

<?php


// Cria Obejto
$mySQL = new MySQL(); 

// Executa uma query
$result = $mySQL->sql("SELECT * FROM admin, clientes, produtos ORDER BY id");

// Exibe informações
while ($dados = mysql_fetch_array($result)){

echo "
<table width='100%' border='0'>
        <tr>
          <td width='120' bgcolor='#F0F0F0'><div align='left'>".$dados['id']."</div></td>
          <td width='180' bgcolor='#F0F0F0'><div align='left'>".$dados['login']."</div></td>
          <td width='200' bgcolor='#F0F0F0'><div align='left'>".$dados['senha']."</div></td>
          <td bgcolor='#F0F0F0'><div align='left' >".$dados['email']."</div></td>
        </tr>
      </table>

";              
                
                }

?>

Ou caso você queira exibir o dado de uma ou de outra tabela individualmente, você pode colocar radio button com a tabela para que possa ser escolhida antes da consulta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq so quero que mostre os clientes, ou admins, ou produtos individual.

 

Tente fazer um registro dos objetos dos bancos:

 

if ( !Registry::isRegistered( 'dbcli' ) ){
    $dbcli = new MySQL();
    $dbcli->host = 'host_de_clientes';
    $dbcli->user = 'usuario';
    $dbcli->pass = 'senha';
    $dbcli->db   = 'admin';
    $dbcli->connect(); //Você pode conectar aqui ou só na hora que precisar...
    
    Registry::register( 'dbcli' , $dbcli );
}

if ( !Registry::isRegistered( 'dbadm' ) ){
    $dbadm = new MySQL();
    $dbadm->host = 'host_de_adms';
    $dbadm->user = 'usuario';
    $dbadm->pass = 'senha';
    $dbadm->db   = 'admin';
    $dbadm->connect(); //Você pode conectar aqui ou só na hora que precisar...
    
    Registry::register( 'dbcli' , $dbadm );
}

if ( !Registry::isRegistered( 'dbpro' ) ){
    $dbpro = new MySQL();
    $dbpro->host = 'host_de_produtos';
    $dbpro->user = 'usuario';
    $dbpro->pass = 'senha';
    $dbpro->db   = 'admin';
    $dbpro->connect(); //Você pode conectar aqui ou só na hora que precisar...
    
    Registry::register( 'dbcli' , $dbpro );
}

Ai quando você precisar é só pegar o objeto adequado:

 

if ( Registry::isRegistered( 'dbadm' ) ){
    $result = Registry::get( 'dbadm' )->sql("SELECT * FROM admin ORDER BY id");

    // Exibe informações
    while ($dados = mysql_fetch_array($result)){
        //..
    }
}

Registry

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ice aju que não consegui explicar direito vou tentar dnv:

 

Aqui nesta linha:

 

} elseif (!mysql_select_db($this->db,$this->link)){

 

o var $db esta definido como hostmons_admin certo. E dentro deste tem admin.

 

Mas em outra consulta eu quero q seja como hostmons_clientes. E dentro deste tem clientes.

 

Ou seja são banco de dados diferentes.

 

Vou postar a foto:

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

sei que ele ja conseguiu a resposta mas eu fiquei com uma duvida..

hostmons é um DB.. e _admin, _cliente e _suporte são tabelas certo?

se for isso pq definir a var $db como hostmons_admin e não só hostmons?

 

sou iniciante em PHP, e gostaria de aprender mais..

a dica que eu dei for por conhecimento em outras linguagens..

 

imiginei uma conexão com o DB hostmons e depois o select da tabela (_admins, _suporte..) via codigo SQL

 

não funciona assim??

Compartilhar este post


Link para o post
Compartilhar em outros sites

imiginei uma conexão com o DB hostmons e depois o select da tabela (_admins, _suporte..) via codigo SQL

não funciona assim??

 

Bom, segundo @osk:

 

Ou seja são banco de dados diferentes.

 

Se o host for o mesmo e ele tiver vários bancos de dados, então ele pode simplesmente fazer uma conexão ao host e identificar a base que ele precisa:

select `usuario` from `_admin`.`usuarios`;
select `nome` from `_clientes`.`clientes`;
select `atendente` from `suporte`.`atendentes`;

 

Porém, para isso funcionar, o host para todos os 3 bancos de dados deve ser o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.