Ir para conteúdo

POWERED BY:

Arquivado

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

uiLhian

Fatal error: Call to a member function query() on a non-object in

Recommended Posts

Boa noite,

 

bom não entendo nada de php apenas sou fuçado,

estou tentando "listar" o conteudo do db com pdo

e está me retornando o seguinte erro:

Fatal error: Call to a member function query() on a non-object in C:\WebServer\freelancer\freelancer\incs\fotos.php on line 10Call Stack#TimeMemoryFunctionLocation10.0051276088{main}( )..\index.php:020.0107300024FotosDAO->getAll( )..\index.php:104

ta no index.php

<?php
$fotosDAO = new fotosDAO();
$results = $fotosDAO->getAll();
foreach($results as $post) {
echo $post->getfotoNOME() . '<br />';
echo '<br />';
}
?>

fotosCON.php

<?php
function conectar()
{
define('HOST', 'mysql:host=localhost;dbname=teste');
define('USER', 'user');
define('PASS', 'senha');


try 
{
$dbh = new PDO(HOST, USER, PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} 
catch(PDOException $e) 
{
echo
(
'<div class="alert alert-error">
Erro:' . $e->getMessage().  ';(
</div>'
);
}
return $dbh;


function desconectar()
{
$this->conectar = null;
}
}

fotos.php

 

<?php
include_once('incs/fotos.php');
include_once('incs/fotosCON.php');


class FotosDAO {


    private $dbh;


    public function getAll() {
        $statement = $this->dbh->query(
            'SELECT * FROM dpfotos'
        );


        return $this->processResults($statement);
    }


    private function processResults($statement) {
        $results = array();


        if($statement) {
            while($row = $statement->fetch(PDO::FETCH_OBJ)) {
                $post = new Foto();


                $post->setfotoID($row->fotoID);
                $post->setfotoNOME($row->fotoNOME);
                $post->setfotoPOS($row->fotoPOS);


                $results[] = $post;
            }
        }


        return $results;
    }


}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linha 10 é esta?

 $statement = $this->dbh->query(
O problema aí é que $dbh não é um objeto. Veja este meu post sobre as mensagens de erro do PHP: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/
É necessário iniciar $dbh dentro da classe, como fez no outro arquivo, quando a inicia como uma instância da classe PDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting function (T_FUNCTION)

agora deu o seguinte erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo,

 

fiz a "conexao direto" e continua dando o mesmo erro:

Fatal error: Call to a member function query() on a non-object in C:\WebServer\freelancer\incs\fotos.php on line 9
<?php
$conn = new PDO(
'mysql:host=localhost;dospicharros', 'user', 'senha'
);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$fotosDAO = new FotosDAO();
$results = $fotosDAO->getAll();

foreach($results as $post) {
echo $post->getfotoNOME() . '<br />';
echo '<br />';
}
?>

a linha 9 é essa aqui: $statement = $this->conn->query('SELECT * FROM dpfotos' );

do arquivos fotos.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde colocou a linha "$this->dbh = conectar()"? Mostre como fez. Você deve ter colocado no lugar errado, por isso gerou erro

 

Faça assim:

 

public function getAll() {
        $this->dbh = conectar()
        $statement = $this->dbh->query(
            'SELECT * FROM dpfotos'
        );


        return $this->processResults($statement);
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

index.php

 

<?php$fotosDAO = new fotosDAO();$results = $fotosDAO->getAll();foreach($results as $post) {echo $post->getfotoNOME() . '<br />';echo '<br />';}?>

fotos.php

 

<?phpinclude_once('incs/fotos.php');include_once('incs/fotosCON.php');class FotosDAO {    private $conn;    public function getAll() {$this->conn = conectar()        $statement = $this->conn->query(            'SELECT * FROM dpfotos'        );        return $this->processResults($statement);    }    private function processResults($statement) {        $results = array();        if($statement) {            while($row = $statement->fetch(PDO::FETCH_OBJ)) {                $post = new Foto();                $post->setfotoID($row->fotoID);                $post->setfotoNOME($row->fotoNOME);                $post->setfotoPOS($row->fotoPOS);                $results[] = $post;            }        }        return $results;    } }?>

fotosCON.php

 

<?phpfunction conectar(){define('HOST', 'mysql:host=localhost;dbname=teste');define('USER', 'user');define('PASS', 'senha');try {$dbh = new PDO(HOST, USER, PASS);$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch(PDOException $e) {echo('<div class="alert alert-error">Erro:' . $e->getMessage().  ';(</div>');}return $dbh;function desconectar(){$this->conectar = null;}}

ERRO GERADO:

 Parse error: syntax error, unexpected '$statement' (T_VARIABLE) in E:\WebServer\freelancer\incs\fotos.php on line 11

Linha 11

$statement = $this->conn->query(

'SELECT * FROM dpfotos'

);

 

 

 

 

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei o ;

deu mais varios erros,

agora travei nesse:

 

 

Fatal error: Call to undefined method FotosDAO::setfotoID() in E:\WebServer\incs\fotos.php on line 25

 

que seria esse trecho:

if($statement) {
            while($row = $statement->fetch(PDO::FETCH_OBJ)) {
                $post = new Foto();


                $post->setfotoID($row->fotoID);
                $post->setfotoNOME($row->fotoNOME);
                $post->setfotoPOS($row->fotoPOS);


                $results[] = $post;
            }
        }

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.