Ir para conteúdo

POWERED BY:

Arquivado

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

kleberksms

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

Recommended Posts

Ola galera, esse é meu primeiro post, antes de eu postar juro que tentei achar algo relacionado. mas o que achei não me ajudou em nada, sempre com o mesmo erro...

 

se alguém tiver alguma ideia

 

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

 

<?php
class PDOConnectionFactory {

   public $con = null;
   public $dbType = "mysql";
   public $host = "localhost";
   public $user = "root";
   public $senha = "root";
   public $db = "gertix";
   public $persistent = false;

   public function PDOConnectionFactory($persistent = false) {
       if ($persistent != false) {
           $this -> persistent = true;
       }
   }

   public function getConnection() {

       try {
           $this -> con = new PDO(
               $this -> dbType .
               ":host=" . $this -> host .
               ";dbname=" . $this -> db,
               $this -> user, $this -> senha,
               array(PDO::ATTR_PERSISTENT => $this -> persistent)
           );
           return $this -> con;

       } catch ( PDOException $ex ) {
            echo "Erro: " . $ex -> getMessage();
       }
   }

   public function Close() {
       if ($this -> con != null)
           $this -> con = null;
   }

}
?>

<?php
require_once ("../PDOConnectionFactory/PDOConnectionFactory.class.php");
require_once ("../model/Usuario.class.php");

class UsuarioDAO extends PDOConnectionFactory {
   public $conex = null;

   public function UsuatioDAO() {
       $this->conex = new PDOConnectionFactory();
       $this->conex->getConnection();
       echo "string";
   }

   public function Cadastrar($usuario) {
       try {
           $stmt = $this->conex->prepare("INSERT INTO usuarios (nome, usuario, senha, data_nascimento, sexo) VALUES (?,?,?,?,?) ");
           $stmt->bindValue(1, $usuario->getNomeUsuario());
           $stmt->bindValue(2, $usuario->getLoginUsuario());
           $stmt->bindValue(3, $usuario->getSenhaUsuario());
           $stmt->bindValue(4, $usuario->getDataNascimento());
           $stmt->bindValue(5, $usuario->getSexo());

           $stmt->execute();
           $this->conex->Close();

       }
       catch (PDOException $ex) {
           echo "Erro: " . $ex -> getMessage();
       }
   }
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, quando for postar códigos, utilize o BBCode [ code ] [ / code ] ( sem espaços ), isso facilita a visualização do mesmo.

Seu problema tá na variável, o seu método getConnection que retorna o PDO e você não define ela como a instância de PDO.

 

       $factory = new PDOConnectionFactory();
       $this->conex = $factory->getConnection();

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, mudei disto:

public function UsuatioDAO() {
       $this->conex = new PDOConnectionFactory();
       $this->conex->getConnection();
   }

para isto:

 

public function UsuatioDAO() {
       $factory = new PDOConnectionFactory();
       $this->conex = $factory->getConnection();
}

 

 

mas o erro continua sendo o de

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, não queria nem tocar no assunto mas, vamos ver uns pontos aqui.

Herança, um Usuário é um Banco de Dados ? o uso indevido de extends nesse caso.

 

Mesmo sendo errado, e você estendendo a Factory pra que uma instância dela dentro do construtor do UsuarioDAO ?

 

<?php

class PDOConnectionFactory {

}

class UsuarioDAO {


	function __construct() {
		// new PDOConnectionFactory
	}

	function Cadastrar() {
		// ...
	}

} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não querendo ser chatto, parece que insere os dados, mas quando vou ver no BD não teve nenhum insert

<?php
class PDOConnectionFactory {

public $con = null;
public $dbType = "mysql";
public $host = "localhost";
public $user = "root";
public $senha = "root";
public $db = "gertix";
public $persistent = false;

public function PDOConnectionFactory($persistent = false) {
	if ($persistent != false) {
		$this -> persistent = true;
	}
}

public function getConnection() {

	try {
		$this -> con = new PDO(
			$this -> dbType . 
			":host=" . $this -> host . 
			";dbname=" . $this -> db, 
			$this -> user, $this -> senha, 
			array(PDO::ATTR_PERSISTENT => $this -> persistent)
		);
		return $this -> con;

	} catch ( PDOException $ex ) {
		 echo "Erro: " . $ex -> getMessage()."asdfghjklç";
	}

}

public function Close() {
	if ($this -> con != null)
		$this -> con = null;
}

}
?>

 

Parece que o cadastrar funcina, pois não da erro nenhum

<?php
require_once ("../PDOConnectionFactory/PDOConnectionFactory.class.php");
require_once ("../model/Usuario.class.php");

class UsuarioDAO {
public $conex = null;

       public function __construct() {
           $con = new PDOConnectionFactory();
           $this->conex = $con->getConnection();
       }

public function Cadastrar($usuario) {
           $query = "INSERT INTO usuarios (nome, usuario, senha, data_nascimento, sexo) VALUES (?,?,?,?,?) ";
	try {
		$stmt = $this->conex->prepare($query);
		$stmt->bindValue(1, $usuario->getNomeUsuario());
		$stmt->bindValue(2, $usuario->getLoginUsuario());
		$stmt->bindValue(3, $usuario->getSenhaUsuario());
		$stmt->bindValue(4, $usuario->getDataNascimento());
		$stmt->bindValue(5, $usuario->getSexo());

		$stmt->execute();
		$this->conex = NULL;

	} 
	catch (PDOException $ex) {
		echo "Erro: " . $ex -> getMessage();
	}
}

       public function Listar(){
           $stmt = $this->conex->prepare("SELECT * FROM usuarios");
           $stmt->execute();
           while($obj = $stmt->fetch(PDO::FETCH_OBJ)){
               echo $obj->nome.$obj->usuario.$obj->senha.$obj->data_nascimento.$obj->sexo;
           }
           $this->conex = NULL;
       }
}
?>

 

mas o BD nenhum registro novo...

acho que sou burro de mais pra isso affff.

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.