Problema com classe extendida PDO

18/10/2012

0

PHP

Boa tarde, estamos em um projeto aqui no trabalho e estou tendo problemas com a PDO..

Abaixo vou passar as classes e o erro que me retorna..

Arquivo usuarioAcessaDAO.class.php
<?php
class UsuarioAcessaDAO implements DAO{
	
	private $conex;
	
	public function UsuarioAcessaDAO(){
		$this->conex = new Conexao(''mysql'');
	}
	
	public function selectRelatorios($usuarioAcessa){
		try{
			$stmt = $this->conex->prepare("
					select
						ua.id_usuario as usuario,
						ua.id_relatorios as relatorio
					from
						rel_usuario_acessa ua
					where
						ua.id_usuario = ?");
			
			$stmt->bindValue(1, $usuarioAcessa->getUsuario());
			
			$this->conex = null;
			return $stmt;
		}catch ( PDOException $ex ){
			echo "Erro: ".$ex->getMessage();
		}
	}

	public function selectModulos(){
		try{
			
			$sql = ''select distinct m.id_modulo, m.sigla from rel_usuario_acessa ua 
					left join rel_relatorios r on ua.id_relatorios = r.id_relatorios
					left join rel_modulos m on r.id_modulo = m.id_modulo where ua.id_usuario = '';
			
			
			$stmt = $this->conex->prepare($sql);
			
			$this->conex = null;
			
			$i=0;
			while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
				$modulos[$i][''ID''] = $row[''ID_MODULO''];
				$modulos[$i][''SIGLA''] = $row[''SIGLA''];
			}
			
			return $modulos;
			
		}catch ( PDOException $ex ){
			echo "Erro: ".$ex->getMessage();
		}
	}
}
?>


Arquivo Conexao.php

<?php
class Conexao extends PDO {
	private $dsn 		= "firebird:dbname=172.17.1.123:banco";
	private $user 		= ''usuario'';
	private $password 	= "12345";
	public 	$handle 	= null;
	
	
	function __construct() {
		try {
			if ( $this->handle == null ) {
				$dbh = parent::__construct( $this->dsn , $this->user , $this->password );
				$this->handle = $dbh;
				return $this->handle;
			}
		}
		catch ( PDOException $e ) {
			echo ''Connection failed: '' . $e->getMessage( );
			return false;
		}
	}

	function __destruct( ) {
		$this->handle = NULL;
	}
}
?>


Arquivo usuarioAcessa.class.php
class UsuarioAcessa{
	private $usuario;
	private $relatorio;

	public function setUsuario($_usuario){
		$this->usuario = $_usuario;
	}
	
	public function setRelatorio($_relatorio){
		$this->relatorio = $_relatorio;
	}
	
	public function getUsuario(){
		return $this->usuario;
	}
	
	public function getRelatorio(){
		return $this->relatorio;
	}
}
?>

Arquivo index.php

<?php
include "includes/logado.php";
include "smarty/libs/Smarty.class.php";
include ''includes/classes/Usuario.class.php'';
include ''includes/classes/UsuarioAcessaDAO.class.php'';

$smarty = new Smarty();
$smarty->template_dir = "smarty/templates";
$smarty->compile_dir = "smarty/templates_c";
$smarty->config_dir = "smarty/configs";
$smarty->assign(''imagens'',''http://''.$_SERVER[''SERVER_NAME''].''/relatorios/smarty/templates/imagens/'');
$smarty->assign(''css'',''http://''.$_SERVER[''SERVER_NAME''].''/relatorios/smarty/templates/estilos/'');

$smarty->assign(''user_id'',$_SESSION[''ID'']);
$username = strtoupper($_SESSION[''username'']);
$smarty->assign(''user_name'',$username);

$usuarioAcessa = new UsuarioAcessa();
$usuarioAcessa->setUsuario($_SESSION[''ID'']);

$usuarioAcessaDAO = new UsuarioAcessaDAO();
$usuarioAcessaDAO->selectModulos();





$data = date(''d/m/Y'');
$smarty->assign(''data'',$data);

$smarty->display("index.tpl");

?>



Quando tento executar me retorna o seguinte erro...

Fatal error: Call to a member function fetch() on a non-object in C:\xampp\htdocs\relatorios\includes\classes\UsuarioAcessaDAO.class.php on line 47

Espero que vocês possam me ajudar..

Obrigado
Felipe Ribeiro

Felipe Ribeiro

Responder

Posts

19/10/2012

Eduardo Oliveira

Eu não sei como está a estrutura do seu projeto, mas veja bem:
- O seu arquivo de Conexão ele faz uma conexão com FIREBIRD, e na sua classe usuarioAcessaDAO você passa MYSQL para o construtor do objeto conexão

 new Conexao(''mysql''); 


Troque isso :

      $sql = ''select distinct m.id_modulo, m.sigla from rel_usuario_acessa ua 
               left join rel_relatorios r on ua.id_relatorios = r.id_relatorios
               left join rel_modulos m on r.id_modulo = m.id_modulo where ua.id_usuario = '';


Por isso :

      $sql = ' select distinct m.id_modulo, m.sigla from rel_usuario_acessa ua 
               left join rel_relatorios r on ua.id_relatorios = r.id_relatorios
               left join rel_modulos m on r.id_modulo = m.id_modulo where ua.id_usuario = "PRECISA DO VALOR PRA COMPARAR" ';


Responder

19/10/2012

Eduardo Oliveira

Man, voce está usando duas aspas simples '', quando na verdade si deve utilizar somente uma '.
Responder

19/10/2012

Felipe Ribeiro

Resolvido... Devido a uma falta de atenção eu não tinha preparado a conexão para o Mysql.

Agora está funcionando !!

Obrigado
Responder

19/10/2012

Eduardo Oliveira

Muito bom, bons estudos.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar