Série da semana: Primeiros passos no React

Veja mais

Por favor, me ajudem com esse erro: Fatal error: Call to a member function prepare() on null in C:\xampp\htdocs\conexao.php on line 14

28/12/2015

2

PHP

<?php class BD{
	 public static $conn;
	 public function __construct(){}
	 
	 public function conn(){
		if(is_null(self::$conn)){
			self::$conn = new PDO('mysql:host=localhost;dbname=cadastro','root','');
			self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}		 
		
		return (self::$conn) ? self::$conn : false; 
	}	
}
$inserir = BD::$conn->prepare("UPDATE clientes set nome = 'Jonas' WHERE id=1");
$inserir->execute();

Responder

Post mais votado

29/12/2015

Welsey tem 2 problemas no seu código:

1 - Atributos estáticos só podem ser acessados por métodos estáticos, o atributo estático $conn está sendo acessado pelo método não estático conn();
public function conn(){}


2 - Você não está atribuindo uma conexão antes de chamar o método prepare();
$inserir = BD::$conn->prepare("UPDATE clientes set nome = 'Jonas' WHERE id=1");


O correto seria assim:
class BD{
    public static $conn;
    public function __construct(){}

    public static function conn(){
        if(is_null(self::$conn)){
            self::$conn = new PDO('mysql:host=localhost;dbname=cadastro','root','');
            self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

        return (self::$conn) ? self::$conn : false;
    }
}

$conexao = BD::conn();
$inserir = $conexao->prepare("UPDATE clientes set nome = 'Jonas' WHERE id=1");
$inserir->execute();
Responder

Mais Posts

29/12/2015

Wesley Jonas

Obrigado. Por que nessa conexão tem que haver um método construct em branco ?
Responder

29/12/2015

William

Geralmente classes que seguem o pattern Singleton escondem o método construtor deixando como private para forçar somente a chamada do método estático, desavisados podem tentar instanciar a classe sendo que o objetivo é haver apenas uma instância em memória por isso do método estático.
Responder

30/12/2015

Wesley Jonas

Obrigado amigo.
Responder