uiLhian 1 Denunciar post Postado Outubro 22, 2014 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
Beraldo 864 Denunciar post Postado Outubro 22, 2014 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
uiLhian 1 Denunciar post Postado Outubro 22, 2014 e como resolver ? :( Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2014 No começo de getAll(), pode fazer isot: $this->dbh = conectar(); Assim, ao executar a linha 10, $this->dbh já será um objeto. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 22, 2014 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
jgustavo99 85 Denunciar post Postado Outubro 22, 2014 Tente usando a query do PDO: http://php.net/manual/pt_BR/pdo.query.php Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 22, 2014 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
Beraldo 864 Denunciar post Postado Outubro 22, 2014 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
uiLhian 1 Denunciar post Postado Outubro 23, 2014 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
Beraldo 864 Denunciar post Postado Outubro 23, 2014 Faltou o ponto-e-vírgula no final desta linha: this->conn = conectar() Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 23, 2014 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
Beraldo 864 Denunciar post Postado Outubro 23, 2014 O erro explica o problema: a classe Foto não possui um método chamado setfotoID(). Você deve implementá-lo. Compartilhar este post Link para o post Compartilhar em outros sites
uiLhian 1 Denunciar post Postado Outubro 23, 2014 entendi, larguei mão mesmo, toda hora um erro. mas agraço pela a atenção. obrigadão mesmo.! Compartilhar este post Link para o post Compartilhar em outros sites