>

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.



Fatal error no MVC com PHP no Salvar, função bind_param()!



Olá
Não estou conseguindo realizar o inert no Banco de Dados, ao clicar no salvar recebo a seguinte mensagem:

Fatal error: Call to a member function bind_param() on a non-object in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\usuarioDAO.php on line 11

Segue abaixo o Código da usuarioDAO.php


public function insert(usuarioVO $value){
$SQL = "INSERT INTO tb_usuarios (nome, tipo, email) VALUES (";
$SQL .= "?,?,?)";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss", $value->getNome(), $value->getTipo(), $value->getEmail());

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



30 Respostas


ola Nilson,

nao ta faltando um ; ali

$SQL .= "?,?,?);" ;




Olá Andre,

Meu erro ainda permanece:

Fatal error: Call to a member function bind_param() on a non-object in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\usuarioDAO.php on line 11


class UsuarioDOA{
public function insert(usuarioVO $value){
$SQL = "INSERT INTO tb_usuarios (nome, tipo, email) VALUES (";
$SQL .= "?,?,?);";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss", $value->getNome(), $value->getTipo(), $value->getEmail());

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




Olá Andre,

Meu erro ainda permanece:

Fatal error: Call to a member function bind_param() on a non-object in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\usuarioDAO.php on line 11


class UsuarioDOA{
public function insert(usuarioVO $value){
$SQL = "INSERT INTO tb_usuarios (nome, tipo, email) VALUES (";
$SQL .= "?,?,?);";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss", $value->getNome(), $value->getTipo(), $value->getEmail());

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




faça o seguinte

class UsuarioDOA

mude para esse class UsuarioDAO

E tire la o ponto e virgula q eu pedi pra vc colocar no outro post




Olá Andre,

Realizei o que sugeriu porem o erro ainda permanece:

Fatal error: Call to a member function bind_param() on a non-object in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\usuarioDAO.php on line 11


class UsuarioDAO{
public function insert(UsuarioVO $value){
$SQL = "INSERT INTO tb_usuarios (nome, tipo, email) VALUES (";
$SQL .= "?,?,?)";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss", $value->getNome(), $value->getEmail(), $value->getTipo());

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




faça assim..

$pstm->bind_param("sss", $value->getNome(), $value->getEmail(), $value->getTipo());

$pstm = $DB->execSQL($SQL);




Permanece o mesmo Erro,André!
Porem mais um conforme descrito abaixo!

Notice: Undefined variable: pstm in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\UsuarioDAO.php on line 13

Fatal error: Call to a member function bind_param() on a non-object in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\UsuarioDAO.php on line 13




faça assim entao

$pstm = $DB->execSQL($SQL);

$pstm = $DB->prepare($SQL);




coloque
$pstm = $DB->prepare($SQL);

ao inves deste
$pstm = $DB->execSQL($SQL);




Fiz isso, e mudou o erro:

Fatal error: Call to undefined method DB::prepare() in C:\EasyPHP\www\TarefasSsim\TarefasSsim\Model\UsuarioDAO.php on line 10




Ola Nilson

qual é video aula q vc esta vendo???




Andre,

Estou fazendo o curso PHP com MVC Online, porem devido a esse erro, não consigo prosseguir no conteudo, estou na Aula 7 - Retorno View.




mostre todo o seu arquivo ProdutoModel , seu ProdutoController e seu ProdutoDAO




Segue conforme solicitado segue:
Meu ProdutoModel


class UsuarioModel{
public function insertModel(UsuarioVO $value){
$usua = new UsuarioDAO();
if($value->getTipo()== ""){
$value->setTipo("usuario");
}
return $usua->insert($value);

}


public function deleteModel(UsuarioVO $value){
$usua = new UsuarioDAO();

return $usua->delete($value);

}

public function updateModel( $value){
$usua = new UsuarioDAO();

return $usua->update($value);

}

public function getByIdModel($id){
$usua = new UsuarioDAO();

return $usua->getById($id);

}

public function getAllModel(){
$usua = new UsuarioDAO();

return $usua->getAll();

}
}





Meu ProdutoController



include("/Model/UsuarioModel.php");
include("/Model/UsuarioVO.php");
include("/Model/UsuarioDAO.php");
include("/Model/DB.php");

class UsuarioController{

public function UsuarioController(){

}
public function salvar(){
$model = new UsuarioModel();
$vo = new UsuarioVO();
$vo->setNome($_POST["txtNome"]);
$vo->setTipo($_POST["txtTipo"]);
$vo->setEmail($_POST["txtEmail"]);
if ($model->insertModel($vo)){
$_SESSION["msg"] = "Usuario cadastrado com sucesso.";
} else {
$_SESSION["msg"] = "Erro ao cadastrar Usuario.";
}

header ("Location: View/usuarios/retorno.php");
}

public function update(){
$model = new UsuarioModel();
$vo = new UsuarioVO();
$vo->setId($_POST["txtId"]);
$vo->setNome($_POST["txtNome"]);
$vo->setTipo($_POST["txtTipo"]);
$vo->setEmail($_POST["txtEmail"]);
if ($model->update($vo)){
$_SESSION["msg"] = "Usuario atualizado com sucesso.";
} else {
$_SESSION["msg"] = "Erro ao atualizar Usuario.";
}

header ("Location: View/usuarios/retorno.php");
}

public function novo(){
include("View/usuarios/insert.php");

}
public function editar(){

$model = new UsuarioModel();

$vo = $model->getById($_GET["id"]);

$_SESSION["id"] = $vo->getId();
$_SESSION["nome"] = $vo->getNome();
$_SESSION["tipo"] = $vo->getTipo();
$_SESSION["email"] = $vo->getEmail();

header ("Location: View/usuarios/edit.php");
}
}







Meu ProdutoDOA


class UsuarioDAO{
public function insert(UsuarioVO $value){
$SQL = "INSERT INTO tb_usuarios (nome, tipo, email) VALUES (";
$SQL .= "?,?,?)";

$DB = new DB();
$DB->getConnection();
//$pstm = $DB->execSQL($SQL);
$pstm = $DB->prepare($SQL);

//$pstm->bind_param("sss", $value->getNome(), $value->getEmail(), $value->getTipo());

$pstm->bind_param("sss", $value->getNome(), $value->getEmail(), $value->getTipo());

$pstm = $DB->execSQL($SQL);

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

public function update(UsuarioVO $value){
$SQL = "UPDDATE tb_usuarios SET nome = ?, tipo = ?, email = ? WHERE id = ?";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sssi", $value->getNome(),$value->getEmail(),$value->getTipo(),$value->getId());

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

public function delete(UsuarioVO $value){
$SQL = "DELETE FROM tb_usuarios WHERE id = ?";

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("i", $value->getId());

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

public function getById($id){
$SQL = "SELECT * FROM tb_usuarios WHERE id = ". addslashes($id);

$DB = new DB();
$DB->getConnection();
$query = $DB->execReader($SQL);

$vo = new UsuarioVO();

while ($reg = $query->fetch_array(MYSQLI_ASSOC)){
$vo->setId($reg["id"]);
$vo->setNome($reg["nome"]);
$vo->setTipo($reg["tipo"]);
$vo->setEmail($reg["email"]);
}

return $vo;

}

public function getAll(){
$SQL = "SELECT * FROM tb_usuarios";

$DB = new DB();
$DB->getConnection();
$query = $DB->execReader($SQL);

return $query;

}
}






mostre tambem seu UsuarioVO




Segue a UsuarioVO;


class UsuarioVO{
private $id;
private $nome;
private $tipo;
private $email;

public function getId() {
return $this->id;
}

public function setId($id) {
$this->id = $id;
}

public function getNome() {
return $this->nome;
}

public function setNome($nome) {
$this->nome = $nome;
}

public function getTipo() {
return $this->tipo;
}

public function setTipo($tipo) {
$this->tipo = $tipo;
}

public function getEmail() {
return $this->email;
}
public function setEmail($email) {
$this->email = $email;
}
}




desculpa,

é que faz tanto tempo q eu não vejo essa video aula

q eu me esqueci...

vc pode deixar assim

$DB = new DB();
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss", $value->getNome(), $value->getEmail(), $value->getTipo());

$pstm = $DB->execSQL($SQL);


e vc esta fazendo direitinho conforme a video aula , pq a video aula é sobre o produto e vc esta fazendo do usuario




Imagina, não tem nada que se desculpar!

Obrigado pela disposição!

Fui testar a sua solução e ao chamar a URL:
http://localhost/TarefasSsim/index.php?Controller=Usuario&Action=novo

recebi um novo erro, Segue a mensagem abaixo:

Parse error: syntax error, unexpected '"Controller/"' (T_CONSTANT_ENCAPSED_STRING) in C:\EasyPHP\www\TarefasSsim\index.php on line 3

index.php


if(isset($_GET["Controller"])){

include "Controller/".$_GET["Controller"]."Controller.php";

$class = $_GET["Controller"]."Controller";

eval("\$Controller = new $class();");


if(isset($_GET["Action"])){
eval("\$Controller->\$_GET['Action']();");
}
}
?>




esta faltando

session_start();




Inseri conforme solicitou e o erro permaneceu:

Url:

http://localhost/TarefasSsim/index.php?Controller=Usuario&Action=novo

Erro:

Parse error: syntax error, unexpected '"Controller/"' (T_CONSTANT_ENCAPSED_STRING) in C:\EasyPHP\www\TarefasSsim\index.php on line 3

index.php



session_start();

if(isset($_GET["Controller"])){

include "Controller/".$_GET["Controller"]."Controller.php";

$class = $_GET["Controller"]."Controller";

eval("\$Controller = new $class();");


if(isset($_GET["Action"])){
eval("\$Controller->\$_GET['Action']();");
}
}
?>




mande o seu projeto pra nos analisar

zipa ele e manda






Professor rafael estou com o mesmo problema ! Ao tentar inserir os dados na tabela do banco de dados da o seguinte erro:

Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\MVCPHP\Model\ProdutoDAO.php on line 12

Vou zipar o meu projeto e postar aqui pra você está dando uma analizada o porque do erro ! É incrivel o meu código aparentemente está idêntico ao seu.

Da uma olha ai pra mim veja se você encontrar o erro.

http://rlsystem.com.br/forum/disco/uploads/9ba75a3b0fb445e0108bcbe5bc62ad9d-MVCPHP.zip




Opa Professor Rafael, tudo bom ? Consegui encontrar o erro no meu código, era apenas uma virgula que eu tinha sobrando na classe DAO, quando ia fazer o comando SQL ! UFFFF!!!! Deu uma canseira essa virgula , mas deu certo graças a deus...achei que não fosse conseguir!!! Fica a dica ai pessoal...




Estou com o mesmo problema e não encontro qualquer erro no meu código.
Fiz um echo da variável $SQL, para ver se tinha algum erro no comando, o que não acontece.

INSERT INTO produtos (desc, marca, preco) VALUES (?, ?, ?)
( ! ) Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\MVC\model\produtoDAO.php on line 12
Call Stack
# Time Memory Function Location
1 0.0004 136464 {main}( ) ..\index.php:0
2 0.0021 185016 eval( '$Controller->$_GET['action']();' ) ..\index.php:11
3 0.0021 185072 produtoController->salvar( ) ..\index.php(11) : eval()'d code:1
4 0.0022 185328 ProdutoModel->insertModel( ) ..\ProdutoController.php:18
5 0.0022 185920 produtoDAO->insert( ) ..\produtoModel.php:8


public function insert(produtoVO $value) {
$SQL = "INSERT INTO produtos (desc, marca, preco) VALUES (";
$SQL .= "?, ?, ?)";
$DB = New DB();
echo $SQL;
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss",$value->getDesc(),$value->getMarca(),$value->getPreco());

if($pstm->execute()){
return TRUE;
}else{
return FALSE;
}
}




O campo desc do MySql esta dando conflito com o DESC do SQL, por isso, tive que mudar o nome do campo para descricao, isso mudou o erro para:

INSERT INTO produtos (descricao, marca, preco) VALUES (?, ?, ?)
( ! ) Strict standards: Only variables should be passed by reference in C:\wamp\www\MVC\model\produtoDAO.php on line 13
Call Stack
# Time Memory Function Location
1 0.0006 136464 {main}( ) ..\index.php:0
2 0.0029 185120 eval( '$Controller->$_GET['action']();' ) ..\index.php:11
3 0.0029 185176 produtoController->salvar( ) ..\index.php(11) : eval()'d code:1
4 0.0029 185432 ProdutoModel->insertModel( ) ..\ProdutoController.php:18
5 0.0029 186032 produtoDAO->insert( ) ..\produtoModel.php:8


public function insert(produtoVO $value) {
$SQL = "INSERT INTO produtos (descricao, marca, preco) VALUES (";
//$SQL .= "'".$value->getDescricao()."', '".$value->getMarca()."', '".$value->getPreco()."')";
$SQL .= "?, ?, ?)";
$DB = New DB();
echo $SQL;
$DB->getConnection();
$pstm = $DB->execSQL($SQL);

$pstm->bind_param("sss",$value->getDescricao(),$value->getMarca(),$value->getPreco());

if($pstm->execute()){
return TRUE;
}else{
return FALSE;
}
}




A linha 13 do meu PHP é a que aparece na cópia do código como 10.
$pstm->bind_param("sss",$value->getDescricao(),$value->getMarca(),$value->getPreco());




Fiz a mudança aparentemente sem sentido no código abaixo e desapareceu o erro...

$decricao=$value->getDescricao();
$marca=$value->getMarca();
$preco=$value->getPreco();

$pstm->bind_param("sss",$decricao,$marca,$preco);