Array
(
)

Problema com classe extendida PDO

PHP
Felipern
|
MVP
    18 out 2012

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
#Código
<?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
#Código
<?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
#Código
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
#Código
<?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

Eduardo Oliveira
   - 19 out 2012

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

#Código new Conexao(''mysql'');

Troque isso :

#Código
$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 :

#Código
$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" ';


Eduardo Oliveira
   - 19 out 2012

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

Felipern
|
MVP
    19 out 2012

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

Agora está funcionando !!

Obrigado

Eduardo Oliveira
   - 19 out 2012

Muito bom, bons estudos.