Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi Pessoal estou com um problema que nunca tive antes.
ao fazer duas consultas consecutivas ao banco mysql, a segunda não é feita, como o acesso ao banco não foce permitido, testes repetir a mesma consulta, ou consultas diferentes e é sempre a mesma coisa. Ou seja o sistema faz uma autenticação de usuário e não consegui mais acessar o banco pro exemplo, pois já acessou uma vez.
Fiz um teste e me parece que o problema ocorre quando ele roda o segundo comando, ele abre a conexão perfeitamente, mas não consegue mais selecionar o banco. Ja rodei na internet algo e não achei, estou perdendo tempo nisso. kkkk
De início ele dava um fatal erro
Fatal error: Uncaught exception 'BancoException' in C:\server\www\myserver.dev\public_html\PRODOC\Banco\Banco.php:51 Stack trace: #0 C:\server\www\myserver.dev\public_html\PRODOC\Repositorio\RepositorioUsuario.php(26): Banco->selectSQL('CALL sp_ChecarL...') #1 C:\server\www\myserver.dev\public_html\PRODOC\Control\ControladorUsuario.php(15): RepositorioUsuario->autenticarUsuario('prof1', '123') #2 C:\server\www\myserver.dev\public_html\PRODOC\Fachada\Fachada.php(44): ControladorUsuario->autenticarUsuario('prof1', '123') #3 C:\server\www\myserver.dev\public_html\PRODOC\GUI\teste.php(9): Fachada->autenticarUsuario('prof1', '123') #4 {main} thrown in C:\server\www\myserver.dev\public_html\PRODOC\Banco\Banco.php on line 51
Eu tratei esse exceção no $e->getMessage(); para seugnda vez que rodo a consulta retorna false;
Depois de tratada a exceção aparece o seguinte
object(Usuario)#5 (5) { ["id":"Usuario":private]=> string(1) "1" ["nome":"Usuario":private]=> string(21) "Carlos Alberto Torres" ["login":"Usuario":private]=> string(5) "admin" ["senha":"Usuario":private]=> NULL ["perfil":"Usuario":private]=> string(1) "1" } Message: bool(false)
Abaixo seguem os códigos, o teste.php foi o que eu usei para testes na gui.
Não sei o que estou fazendo de errado, tentei tirar a fachada do singleton e criar várias instâncias dela e não teve jeito, mesmo erro.
Se alguém souber e puder me ajudar ficarei muito grato.
Esse é o arquivo que usei para testar
> <?phpREQUIRE_ONCE "../Fachada/Fachada.php";
$f=Fachada::getInstance();
echo var_dump($f->autenticarUsuario("admin","123"));
echo var_dump($f->autenticarUsuario("admin","123"));
?>
Essa é a minha Fachada
> <?php
REQUIRE_ONCE "../Control/ControladorUsuario.php";
REQUIRE_ONCE "../Interface/IRepositorioUsuario.php";
REQUIRE_ONCE "../Repositorio/RepositorioUsuario.php";
/*FACHADA
*
* Fachada do Tipo Singleton
* O padrão Singleton garante que apenas ums instancia da
* Fachada seja criada na aplicaçao.
*
* É através da fachada que a GUI irá se comunicar com
* as camadas inferioes da aplicação
*
* Para acessar a fachada basta usar o comando
* Fachada::getInstance();
*
* */
class Fachada {
// Instancia única da Fachada
static $instancia = NULL;
// Usuários
private $controladorUsuario;
private $repUsuario;
// Construtor privado Evita que o programador crie nova instacia do objeto fachada
private function __construct()
{
// Usuários
$this->repUsuario = new RepositorioUsuario();
$this->controladorUsuario = new ControladorUsuario($this->repUsuario);
}
// Usuario - MÉTODOS
public function autenticarUsuario($login,$senha) {
return $this->controladorUsuario->autenticarUsuario($login,$senha);
}
static function getInstance() {
if(self::$instancia==NULL)
{
self::$instancia = new Fachada();
}
return self::$instancia;
}
// Evita que o programador duplique o objeto fachada
private function __clone()
{
// Sobrecarga do método clone vazia
}
}
?>
CONTROLADOR
> <?phpREQUIRE_ONCE "../Interface/IRepositorioUsuario.php";
REQUIRE_ONCE "../Entidades/Usuario.php";
REQUIRE_ONCE "../Entidades/Professor.php";
class ControladorUsuario{
private $repUsuario;
function __construct(IRepositorioUsuario $repoCliente) {
$this->repUsuario=$repoCliente;
}
/*
public function autenticarUsuario($login,$senha)
{
return $this->repUsuario->autenticarUsuario($login,$senha);
}
*/
public function autenticarUsuario($login,$senha)
{
$result = $this->repUsuario->autenticarUsuario($login,$senha);
if ($result[0]==NULL) {
return FALSE;
}
if ($result[0]['idTipo']==1) {
return new Usuario($result[0]['idUsuario'], $result[0]['nomeUsuario'], $result[0]['login'], NULL, $result[0]['idTipo']);
}
elseif ($result[0]['idTipo']==2)
{
return new Professor($result[0]['idUsuario'], $result[0]['nomeUsuario'], $result[0]['login'], NULL, $result[0]['idTipo'], $result[0]['dataUltPromocao'], $result[0]['idTituloProfessor']);
}
}
}
?>
REPOSITORIO
> <?phpREQUIRE_ONCE "../Interface/IRepositorioUsuario.php";
REQUIRE_ONCE "../Banco/Banco.php";
/* DADOS
*
* Classe que Controla o Acesso ao Banco
* Aqui coloquei só as Querys comandos
* de Banco coloquei em classe auxiar Banco para não carregar muito
* a Clase Repositório, mas pode-se colocar tudo junto aqui.
*
/
class RepositorioUsuario implements IRepositorioUsuario{
private $banco; //Classe auxiliar a repositório - Auxilia conexão com banco
function __construct() {
$this->banco=new Banco();
}
function autenticarUsuario($login,$senha) {
try {
$this->banco->conecta();
//echo var_dump($this->banco->selectSQL("SELECT * FROM Usuarios"));
$this->banco->selectSQL("CALL sp_ChecarLogin ('".$login."','".$senha."')");
$this->banco->desconecta();
//echo var_dump($this->banco->getNumRows());
//echo var_dump($this->banco->getResult());
return $this->banco->getResult();
} catch (Exception $e) {
echo 'Message: ' .$e->getMessage();
}
}
function buscaTituloProfessor($id)
{
//$this->banco->conecta();
$this->banco->selectSQL("SELECT UP.dataUltPromocao, UP.idTituloProfessor, TP.nomeTitulo
FROM usuarioprofessor as UP JOIN tituloProfessor AS TP
on UP.idTituloProfessor=TP.idTituloProfessor
WHERE idUsuario=id");
return $this->banco->getResult();
}
}
?>
UMA CLASSE AUXILIAR QUE CRIEI PARA CONEXÃO COM BANCO
<?phpREQUIRE_ONCE "../Excecao/BancoException.php";
/*DADOS
*
* Classe de conexão ao banco
* Possui instruções de manipulação de banco
*
/
class Banco{
private $user;
private $pass;
private $local;
private $db;
private $conexao;
private $result;
public function __construct($db='prodoc', $user='root', $pass='123', $local='localhost'){
$this->setDb($db);
$this->setUser($user);
$this->setPass($pass);
$this->setLocal($local);
//$this->conecta();
}
public function conecta(){
if (!$conexao=mysql_connect($this->getLocal(), $this->getUser(), $this->getPass()) )
throw new BancoException("Falha na conexao.", mysql_error() );
if (!mysql_select_db($this->getDb()) )
throw new BancoException("Falha ao selecionar o banco ".$this->getDb() , mysql_error() );
}
public function desconecta()
{
if ($this->conexao){
mysql_close($this->conexao);
}
}
public function getNumRows(){
return mysql_num_rows( $this->result );
}
public function selectSQL( $sql ) {
if (!($result = mysql_query($sql)) )
throw new BancoException("Falha em executar consulta - selectSQL.", mysql_error() );
$this->setResult( $result );
}
public function executeSQL( $sql ) {
if (!mysql_query($sql))
throw new BancoException("Falha em executar consulta - executeSQL.", mysql_error() );
}
private function setDb( $valor ){
$this->db = $valor;
}
private function setUser( $valor ){
$this->user = $valor;
}
private function setPass( $valor ){
$this->pass = $valor;
}
private function setLocal( $valor ){
$this->local = $valor;
}
private function getDb( ){
return $this->db;
}
private function getUser(){
return $this->user;
}
private function getPass(){
return $this->pass;
}
private function getLocal(){
return $this->local;
}
private function setResult( $valor ){
$this->result = $valor;
}
public function getResult(){
$retorno = array();
while( $linha = mysql_fetch_array($this->result, MYSQL_ASSOC) ) {
array_push($retorno, $linha);
}
return $retorno;
}
}
?>
> <?phpclass BancoException extends Exception{
private $mensagem;
public function __construct($mensagem, $erro=''){
$this->setMensagem(parent::getMessage(). "\n" . $mensagem . "\n" . $erro);
}
private function setMensagem( $valor ){
$this->mensagem = $valor;
}
public function getMensagem(){
return $this->mensagem;
}
}
?>Carregando comentários...