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
0
<?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();
Wesley Jonas
Curtir tópico
+ 0
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();
2 - Você não está atribuindo uma conexão antes de chamar o método prepare();
O correto seria assim:
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();
William
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
Clique aqui para fazer login e interagir na Comunidade :)