>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



erro no cadastro dizendo nonobject PREPARE


Dá uma olhada em minha classe.


Dá o erro:



13 Respostas


Dá uma olhada em minha classe.



Dá o erro:




Olá Antonio,

Seu objeto conexao está nulo, logo ele não é uma PDO.

Assim, ele não vai encontrar o metódo prepare.

Faça algo como

$this->getConexao()->prepare($SQL);

E não de um objeto vázio.




Oi rafael Obrigado fiz o que disse mas agora estou tendo o problema.
Fatal error: Call to a member function bind_param() on a non-object in /home/super961/public_html/eureciclomvc/Model/EnderecoDAO.php on line 20



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

class EnderecoDAO {

public function insert(enderecoVO $value) {

$SQL = "INSERT INTO endereco (NULL, cidades_id, bairro, endereco, cep) VALUES (";
$SQL .= " ?,?,?,?,?)";

$BaseDados = new BaseDados();
$BaseDados->getConexao();
// $pstm é o Prepare Statmet o método que é necessário chamar da classe que evita o SQL ingection
$pstm = $BaseDados->ExecSql($SQL);
// Parametros passados "s" significa que o valor é uma string
$pstm->bind_param("i", $value->getCidades_id()); <----------ESSA É A LINHA 20
$pstm->bind_param("s", $value->getBairro());
$pstm->bind_param("s", $value->getEndereco());
$pstm->bind_param("s", $value->getCep());

if ($pstm->execute())
return true;
else
return false;
}




Na verdade eu notei que o Parametro está vindo vazio, verifiquei o formulário para ver se está enviando o parametro mas não sei o que está havendo veja.

insert.php



















Cidade ID:
Bairro:
Endereço:
Cep:



EnderecoController.php

public function salvar() {

echo 'SALVAR CIDADE: ' . $_POST['cidades_id'];

$model = new EnderecoModel();
$vo = new EnderecoVO();
$vo->setCidades_id($_POST["cidades_id"]);
$vo->setBairro($_POST["bairro"]);
$vo->setEndereco($_POST["endereco"]);
$vo->setCep($_POST["cep"]);
if ($model->insertModel($vo)) {
$_SESSION["Mensagem"] = "Endereço Cadastrado com sucesso!";
} else {
$_SESSION["Mensagem"] = "Erro ao Cadastrar endereço.";
}
header("Location: View/produtos/retorno.php");
}




Antonio,

Preciso que você veja como fiz na vídeo vídeo aula.

Pois aqui está diferente.

Mesom agora você pegando de getConexao, seu método ExecSql, tem um return null, quando criou ele lá na classe.

Pois de novo você está apontando para um atributo vazio.

$BaseDados->ExecSql($SQL);


Faz assim, lá no getConexao, faz assim:


$this->conexao = new mysqli('localhost', 'root', 'root', 'mvc');
return $this-conexao();

Pois você não estava atribuindo nada ao atributo conexão. Logo ele era null.




Rafael, bom dia. Desculpe a ignorância, mas fiz o que você me disse mas continua dando erros.
estou anexando os arquivos aqui tem como você dar uma olhada por favor?

Agora coloquei esses arquivos em outro endereço.
http://soconcessionariasms.com.br/phpmvc/index.php?Controller=Endereco&Action=novo

para baixar o projeto com todos os arquivos....
http://soconcessionariasms.com.br/phpmvc.zip

depois de baixar por favor me avise para excluir o arquivo. Obrigado.




Antonio

É preciso ficar assim:





public function getConexao() {
$this->conexao = new mysqli('localhost', 'usuario', 'senha', 'banco');
return $this->conexao;
}




Rafael já fiz isso e não resolve... você baixou os arquivos que disponibilizei pra vc ver? já vi umas duas vezes os vídeos e comparei mas não encontrei a diferença...




Opa
Sim, o erro que tinha me mostrado é esse.

Qual o outro erro que ele exibe?




Poxa Rafael acho que nem precisava tudo isso... Estudando seu código aqui percebi o problema estava aqui.


$pstm->bind_param("iisss", $value->getId(), $value->getCidades_id(), $value->getBairro(), $value->getEndereco(), $value->getCep());



No Bind_Param a primeira string: Significa os tipos dos objetos que estamos enviando no meu caso: Inteiro, Inteiro, String, String,String.


Mas eu estava colocando sssss tudo como String.




Opa Antonio

Precisava sim, porque você tinha um objeto null.

Refaz como antes para você visualizar o erro do objeto null?

No caso o sistema usava a conexão de um atributo, mas o atributo ia ser sempre null, já que você só dava return direto no método, como explique nos posts acima.

Mas esse problema que mostrou também é muito importante.

Agora ta funcionando?

Qualquer coisa estou ai.

Até mais




Sim, agora está tudo funcionando estou agora trabalhando com o UpDate...