Call to Undefined method PDO::bindParam(), how do I fix it?

Asked

Viewed 1,023 times

1

I’m starting OO studies and decided to take a look at the PDO, only it’s not working. Help me, please:

<?php

class Cliente {
   private $nome;
   private $email;
   private $telefone;
   protected $cpf;
   protected $senha;
   private $pdo;


   public function __construct() {
       try{
       $this-> pdo = new PDO ("mysql:host=localhost; dbname=clientes;","root","");
       } catch (PDOException $erro){
           echo "Não Foi possivel conectar ao Banco: ".$erro->getMessage();
       } 


   }
   public function cadastrar($nome, $email, $cpf, $data_nascimento, $telefone, $endereco){
               $this-> pdo -> prepare ("select CPF from cliente where CPF = ':cpf'");
               $this-> pdo -> bindParam (':cpf', $cpf);
               $this-> pdo -> execute();

               if ($this->pdo -> rowCount() >= 1){
                   echo "Cadastro já existente.";
               } else { 
               try {
               $this->pdo->prepare("INSERT INTO clientes(nome, email, data_naschimento, telefone, endereco) 
                  values (':nome',':endereco',':email',':data_nascimento', ':telefone', ':endereco')");
                  $this->pdo -> bindParam(':nome', $nome);
                  $this->pdo -> bindParam (':endereco', $email);
                  $this->pdo -> bindParam (':email', $data_nascimento);
                  $this->pdo -> bindParam (':data_nascimento', $telefone);
                  $this->pdo -> bindParam (':telefone', $endereco);
                  $this->pdo -> execute();
                  echo "Dados cadastrados com Sucesso";
               }
               catch (PDOException $erro){
                   echo "Não foi possivel inserir os dados no banco: ".$erro->getMessage();

               }

        }


   }

   public function apagarCadastro($cpf){
           //Executa uma query que apaga os dados o banco
    try{
           $this -> pdo -> prepare("DELETE FROM CLIENTE WHERE CPF = ':cpf' ");
           $this -> pdo -> bindParam (':cpf', $cpf);
           $this -> pdo -> execute();
    } 
    catch (PDOException $erro) {
           echo "Não foi possivel apagar os dados: ". $erro->getMessage();
    }
    if ($this -> pdo -> rowcount() >=1 ){
           echo "Todos os dados foram apagados com Sucesso.";
       }
   } 
   public function atualizarNome($newNome, $oldNome){
           //Executa uma query que atualiza o nome no banco
           try {
           $this -> pdo -> prepare ("UPDATE CLIENTES SET NOME = ':nome' WHERE NOME = ':nome2'");
           $this -> pdo -> bindParam (':nome', $newNome);
           $this -> pdo -> bindParam (':nome2', $oldNome);
           } catch (PDOException $erro){
               echo "Não foi possível atualizar os dados". $erro->getMessage();
           }
   }
   public function atualizarEmail(){
       //Executa uma query que atualiza o banco
   }
   public function atualizarSenha(){
       //Executa uma query que atualiza o banco
   }
   public function exibeDados(){
       //Executa uma query que da um select no banco

   }
   public function getPdo() {



   }

}

1 answer

6


The method bindParam belongs to the class Pdostatement. The method prepare class PDO returns a PDOStatement:

$stmt = $this->pdo->prepare("QUERY");
$stmt->bindParam(":param", $value);
$stmt->execute();

When to use the prepare, assign your return to a variable, and use it to associate the parameters to the query with the bindParam.

In your case, we can change the following section:

       try {
          $this->pdo->prepare("INSERT INTO clientes(nome, email, data_naschimento, telefone, endereco) 
          values (':nome',':endereco',':email',':data_nascimento', ':telefone', ':endereco')");
          $this->pdo -> bindParam(':nome', $nome);
          $this->pdo -> bindParam (':endereco', $email);
          $this->pdo -> bindParam (':email', $data_nascimento);
          $this->pdo -> bindParam (':data_nascimento', $telefone);
          $this->pdo -> bindParam (':telefone', $endereco);
          $this->pdo -> execute();
          echo "Dados cadastrados com Sucesso";
       }
       catch (PDOException $erro){
           echo "Não foi possivel inserir os dados no banco: ".$erro->getMessage();

       }

To:

       try {
          $stmt = $this->pdo->prepare("INSERT INTO clientes(nome, email, data_naschimento, telefone, endereco) 
          values (':nome',':endereco',':email',':data_nascimento', ':telefone', ':endereco')");
          $stmt -> bindParam(':nome', $nome);
          $stmt -> bindParam (':endereco', $email);
          $stmt -> bindParam (':email', $data_nascimento);
          $stmt -> bindParam (':data_nascimento', $telefone);
          $stmt -> bindParam (':telefone', $endereco);
          $stmt -> execute();
          echo "Dados cadastrados com Sucesso";
       }
       catch (PDOException $erro){
           echo "Não foi possivel inserir os dados no banco: ".$erro->getMessage();

       }
  • Thank you, as soon as I get home I will test. And I say if it worked again, thank you for your attention.

  • @Tiagosilveira No problem. If this answer was really useful, select it as the correct answer to the question, so other people who have the same doubt as Oce, can more easily find the solution. :)

  • Thank you very much, solved my problem. Thank you very much.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.