Ir para conteúdo

POWERED BY:

Arquivado

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

ADMINWEB

Estou esse erro Fatal error: Call to a member function prepare() on a

Recommended Posts

percebi que conecta sem erro mais não cadastra.

Minha conexão com o banco:

conecta.php

<?php
function conectar(){
try {
$username = 'root';
$password = 'usbw';
$pdo = new PDO('mysql:host=localhost;port=3307;dbname=netmaxnc', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
?>
O arquivo que esta dando erro: na linha 14:
cadastra.php
<?php
function cadastrar($tabela, $atributos){
$pdo = conectar();
$keys = array_keys($atributos);
$camposTabela = implode(',', $keys);
$values = null;
foreach ($keys as $key) {
$values.=', :'.$key;
}
$values = trim(ltrim($values, ','));
$cadastrar = $pdo->prepare("insert into $tabela ( $camposTabela ) values( $values)");
$cadastrar->execute(array($atributos));
return $pdo->lastInsertId();
}
?>
Alguém por favor pode me ajudar agradeço sou novato no PDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu havia me esquecido de colocar essa paginas

config.php
<?php
ini_set('display_erros', 1);
require 'app/functions/conexao/conecta.php';
require 'app/functions/crud/cadastrar.php';
require 'app/functions/crud/atualizar.php';
require 'app/functions/crud/deletar.php';
require 'app/functions/crud/listar.php';
?>

 

index.php

<?php require "config.php"; ?>
<?php
$atributos = [
'usuario' => 'varlei',
'cpf' => '00000000000'
];
cadastrar('usuarios',$atributos);
?>
Como seria para resolver esse retorno para essa variável tem um exemplo no Código?
Não consegui resolver ainda alguém tem um exemplo solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sua função conectar não retorna nada.

Ela precisa retornar $pdo:

return $pdo;

Obrigado agora o erro não aparece porém ainda não esta cadastrando no banco veja como ficou:

<?php
function cadastrar($tabela, $atributos){
$pdo = conectar();
return $pdo;
$keys = array_keys($atributos);
$camposTabela = implode(',', $keys);
$values = null;
foreach ($keys as $key) {
$values.=', :'.$key;
}
$values = (trim(ltrim($values, ',')));
$cadastrar = $pdo->prepare("insert into $tabela ( $camposTabela ) values( $values )");
$cadastrar->execute($atributos);
return $pdo->lastInsertId();
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

não, cara...

retorno só existe dentro de funções e métodos

 

altere sua função conectar:

 

 

function conectar(){
try {
$username = 'root';
$password = 'usbw';
    $pdo = new PDO('mysql:host=localhost;port=3307;dbname=netmaxnc', $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    return $pdo;
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
}

 

Veja:

http://php.net/manual/pt_BR/language.functions.php

http://php.net/manual/pt_BR/functions.returning-values.php

 

E arrume a indentação do código

Veja este guia com essa e outras dicas: http://www.ultimatephp.com.br/guia/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por brunopeople
      Eu estou fazendo um projeto de CRUD consumindo uma API Restfull com banco de dados mongoDB para uma teste de vaga de emprego, eu fiz a aplicação e ela roda sem erros nenhum, porém ao adicionar o registro do post ele não está adicionando o registro no banco de dados? Eu não consegui realmente encontrar o erro do por que isto está acontencendo ou por que? eu gostaria muito de alguém me ajudasse. 
       
      https://github.com/brunopeople/Teste-RedFox-Full-Stack
    • Por Rui PG
      Olá Amigos!
      Por favor, vocês poderiam me ajudar em uma questão, sou muito novo em desenvolvimento e acabei pegando o barco andando aqui na empresa :) rs.
       
      NECESSIDADE
       
      - Carregar os dados que vem da procedure "Proc_Lista" nas colunas que foram criadas manualmente no Datagrid.
      - Ao clicar no checkbox, da coluna “Selecionar”, de qualquer linha do Datagrid, os dados da linha devem ser apresentados nos campos do Form (TextBox e Combobox).
      - Ao desmar o checkbox da linha selecionada no Datagrid, os dados devem ser limpos do Form.
       
      O que eu tentei fazer
       
       
      Quando executo o programa o sistema está criando os campos automaticamente dentro do datagrid e deveria carregar dentro de cada coluna que foi criada.

      Resultado que está dando errado, quando carrego os dados no datagrid.
      O código está substituindo os meus campos que terminam com o (X), nesse caso preciso que as informações carreguem dentro dos campos terminados em (X) na qual eu criei manualmente, porém respeitando as camadas do projeto na qual descrevi abaixo.
      (Print do form em execução)

       
      CAMADA DE DADOS
      - Lista os Dados para o DataGrid
              public DataTable MostrarVisita(int CODALUNO)
              {
                  comando.Connection = conexao.Conectar();
                  comando.CommandText = "Proc_Lista_FollowupDetalheVisita";
                  comando.CommandType = CommandType.StoredProcedure;
                  comando.Parameters.AddWithValue("@CODALUNO", CODALUNO);
                  leer = comando.ExecuteReader();
                  tabela.Load(leer);
                  conexao.Desconectar();
                  return tabela;
              }//fim do bloco
       
      CAMADA DE NEGOCIOS
      public DataTable MostrarFollowupGeral(string CODALUNO)
              {
                 DataTable tabela = new DataTable();
          tabela = objetoFollowupGeral.MostrarVisita(Convert.ToInt32(CODALUNO));
                 return tabela;
              }
       
      CAMADA DO USUARIO
              private void MostrarFollowupVisita()
              {
       
                  dtgVisita.Columns.Clear
                  var columnCheck = new DataGridViewCheckBoxColumn();
                  columnCheck.HeaderText = "[x]";
                  this.dtgVisita.Columns.Add(columnCheck);
       
                 
                  var varCodAlunoII = txtCodAluno.Text;
      FollowupGeralModel objectInterno = new FollowupGeralModel();               dtgVisita.DataSource = objectInterno.MostrarFollowupGeral(varCodAlunoII.ToString());
                  dtgVisita.Columns[1].Visible = false;
                  txtTotalLinhaDataGrid.Text = dtgVisita.RowCount.ToString();
              }
       
    • Por tekton
      Olá pessoal, uma empresa pediu pra fazer um teste e mandou fazer um CRUD com Nome, Email, Telefone e Endereço. Seguindo as aulas da parte de CRUD do Bonieky Lacerda tentei incluir mais dois itens mas não está dando certo. Não sei o que posso estar fazendo errado. Vou colocar os códigos para mostrar.
       
      // BANCO -- phpMyAdmin SQL Dump -- version 4.9.0.1 -- https://www.phpmyadmin.net/ -- -- Host: localhost:8889 -- Tempo de geração: 07/11/2019 às 17:05 -- Versão do servidor: 5.7.26 -- Versão do PHP: 7.3.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; -- -- Banco de dados: `teste` -- -- -------------------------------------------------------- -- -- Estrutura para tabela `tab_teste` -- CREATE TABLE `tab_teste` ( `id` int(11) NOT NULL, `nome` varchar(100) NOT NULL, `email` varchar(50) NOT NULL, `telefone` int(20) NOT NULL, `endereco` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Índices de tabelas apagadas -- -- -- Índices de tabela `tab_teste` -- ALTER TABLE `tab_teste` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de tabelas apagadas -- -- -- AUTO_INCREMENT de tabela `tab_teste` -- ALTER TABLE `tab_teste` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; // INDEX DO CRUD <?php include 'teste.class.php'; $teste = new Teste(); ?> <h1>teste</h1> <table border="1" width="500"> <tr> <th>ID</th> <th>Nome</th> <th>Email</th> <th>Telefone</th> <th>Endereço</th> </tr> <?php $lista = $teste->getAll(); foreach ($lista as $item): ?> <tr> <td><?php echo $item['id']; ?></td> <td><?php echo $item['nome']; ?></td> <td><?php echo $item['email']; ?></td> <td><?php echo $item['telefone']; ?></td> <td><?php echo $item['endereco']; ?></td> </tr> <?php endforeach; ?> </table> // CRUD <?php class Teste { private $pdo; public function __construct(){ $this->pdo = new PDO("mysql:dbname=teste;host=localhost", "root","root"); } public function adicionar($nome, $email, $telefone, $endereco){ if($this->existeEmail($email) == false){ $sql = "INSERT INTO tab_teste (nome, email, telefone, endereco) VALUES (:nome, :email, :telefone, :endereco)"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':nome', $nome); $sql->bindValue(':email', $email); $sql->bindValue(':telefone', $telefone); $sql->bindValue(':endereco', $endereco); $sql->execute(); return true; } else{ return false; } } public function getNome($email){ $sql = "SELECT nome FROM tab_teste WHERE email = :email"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':email', $email); $sql->execute(); if($sql->rowCont() > 0){ $info = $sql->fetch(); return $info['nome']; }else { return ''; } } public function getAll(){ $sql = "SELECT * FROM tab_teste"; $sql = $this->pdo->query($sql); if($sql->rowCont() > 0){ return $sql->fetchAll(); }else{ return array(); } } public function editar($nome, $email) { if($this->existeEmail($email) == true){ $sql = "UPDATE tab_teste SET nome = :nome WHERE email = :email"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':nome', $nome); $sql->bindValue(':email', $email); $sql->bindValue(':telefone', $telefone); $sql->bindValue(':endereco', $endereco); $sql->execute(); return true; }else{ return false; } } public function excluir($email){ if($this->existeEmail($email)){ $sql = "DELETE FROM tab_teste WHERE email = :email"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':email', $email); $sql->execute(); return true; } else { return false; } } private function existeEmail($email){ $sql = "SELECT FROM tab_teste WHERE email = :email"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':email', $email); $sql->execute(); if($sql->rowCont() > 0){ return true; }else { return false; } } }  
    • Por Claudinei Teodoro
      Sou super novato estou começando a entender programação agora e estou com dificuldade em implementar o método UPDATE no meu DAO Generico.
      Os métodos INSERT, SELECT, DELETE já esta funcionando preciso somente de uma ajuda para o método UPDATE.

      Segue abaixo método INSERT que estou utilizando, alguém pode me ajudar com o método UPDATA utilizando como base este método INSERT.


      public void salvar(T objeto) throws SQLException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException {


      Class classe = objeto.getClass();

      String parteInicialSQL = "INSERT INTO " + classe.getSimpleName().toLowerCase() + "(";

      Field[] atributos = classe.getDeclaredFields();
      String parteFinalSQL = ") VALUES(";

      for (Field atributo : atributos) {
      if (!"id".equals(atributo.getName())) {
      parteInicialSQL += atributo.getName().toLowerCase() + ",";
      parteFinalSQL += "?,";
      }
      }

      parteInicialSQL = parteInicialSQL.substring(0, parteInicialSQL.length() - 1);
      parteFinalSQL = parteFinalSQL.substring(0, parteFinalSQL.length() - 1) + ")";

      Class.forName("org.postgresql.Driver");
      Connection conexao = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/postgres", "postgres", "123456");
      PreparedStatement sql = conexao.prepareStatement(parteInicialSQL + parteFinalSQL);

      int numeroInterrogacao = 1;
      for (Field atributo : atributos) {
      if (!"id".equals(atributo.getName())) {
      atributo.setAccessible(true);
      sql.setObject(numeroInterrogacao++, atributo.get(objeto));
      }
      }

      System.out.println(parteInicialSQL + parteFinalSQL);

      sql.execute();
      conexao.close();

      }
    • Por lucasvbl
      <form id="frmDados" name="frmDados" class="form-horizontal" method="post" action="" enctype="multipart/form-data"> <input name="acao" id="acao" type="hidden" value="paginas"> <? if($_idCodigo){ ?> <input name="r" id="r" type="hidden" value="<?=$_idCodigo;?>"> <? } ?> <div class="row"> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Titulo</label> <div class="col-md-10"> <input class="form-control" autocomplete="off" type="text" name="txtDescricao" id="txtDescricao" value="<?=$_rowDados->C02_DESCRICAO;?>"> </div> </div> </div> <? if($_idCodigo){ ?> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Link</label> <div class="col-md-10"> <input readonly="readonly" class="form-control" type="text" name="txtLink" id="txtLink" value="pagina.php?p=<?=$_rowDados->C01_ID;?>"> </div> </div> </div> <? } ?> </div> <div class="row"> <div class="col-md-12"> <div class="form-group row"> <label class="col-md-12 col-form-label">Conteúdo</label> <div class="col-md-12"> <textarea class="form-control" name="txtConteudo" id="txtConteudo"> <?=$_rowDados->C04_CONTEUDO;?> </textarea> </div> </div> </div> </div> <div class="col-md-12" style="text-align: center;"> <button class="btn btn-oval btn-success" type="button" id="btGravar">Gravar</button> </div> </form> <script type="text/javascript"> $(function () { $("#btGravar").click(function(){ erros = 0; if(!$("#txtDescricao").val()){ mensagem('mensagemDIV', 'danger', 'Preencha o campo <strong>Título para a página</strong>.', 0, 'txtEntidade'); erros = 1; } if(erros > 0){ return; } off("btGravar"); var formData = $("#frmDados").serialize(); $.ajax({ url: "app.php", type: "POST", data: formData, dataType: "json", success: function (retorno) { if(retorno.status == '1'){ tratarRetorno(retorno); } if(retorno.status == '400'){ tratarRetorno(retorno); } on("btGravar"); return; } }).fail(function (jqXHR, textStatus, error) { console.log(jqXHR.responseJSON); }); return; }); }); $(document).ready(function(){ $("#txtTitulo").focus(); }); </script> Estou com um problema num crud utilizando ajax, ele meio que "corrompe a string"... 
      ENVIO ASSIM
       
      ELE SALVA ASSIM
       
      Não estou utilizando nenhum editor nada, num textarea
      ESSE CODIGO
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.