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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar