Senhores, boa tarde, tendo em vista exercitar o que venho aprendendo, no curso de php, resolvi fazer alguns formulários, e como já era de se esperar diversos problemas estão surgindo. Com base no conhecimento adquirido no módulo de PDO resolvi refatorar um função de meu pequeno projeto, mas infelizmente não obtive êxito. O erro abaixo ocorre
PDOException Object
(
[message:protected] => SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
[string:Exception:private] =>
[code:protected] => HY093
[file:protected] => C:\xampp\htdocs\UO-BA\class\Servidor.php
[line:protected] => 94
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => C:\xampp\htdocs\UO-BA\class\Servidor.php
[line] => 94
[function] => execute
[class] => PDOStatement
[type] => ->
[args] => Array
(
)
)
[1] => Array
(
[file] => C:\xampp\htdocs\UO-BA\adiciona-servidor.php
[line] => 18
[function] => inserir
[class] => Servidor
[type] => ->
[args] => Array
(
)
)
)
[previous:Exception:private] =>
[errorInfo] => Array
(
[0] => HY093
[1] => 0
)
)
Função que está funcionando corretamente
function insereServidor (Servidor $servidor) {
$query = "INSERT INTO servidores (hostname,ip,rede,localizacao,observacao) VALUES ('{$servidor->getHostname()}','{$servidor->getIp()}','{$servidor->getRede()->getId()}','{$servidor->getLocalizacao()->getId()}','{$servidor->getObservacao()}')";
$cadastrar = mysqli_query($this->conexao,$query);
$id_servidor = mysqli_insert_id($this->conexao);
foreach ($servidor->getFuncao() as $id_funcao) {
$query = "INSERT INTO servidor_funcao(cod_servidor,cod_funcao) values($id_servidor,$id_funcao)";
mysqli_query($this->conexao,$query);
}
foreach ($servidor->getInterface() as $id_interface) {
$query = "INSERT INTO servidor_interface(cod_servidor,cod_interface) values($id_servidor,$id_interface)";
mysqli_query($this->conexao,$query);
}
return $cadastrar;
}
Função refatorada que está apresentando erro. Acredito que seja no foreach.
public function inserir()
{
$query = "INSERT INTO servidores(hostname, ip, rede, localizacao, observacao) VALUES (:hostname, :ip, :rede, :localizacao, :observacao)";
$conexao = Conexao::pegarConexao();
$stmt = $conexao->prepare($query);
$stmt->bindValue(':hostname', $this->hostname);
$stmt->bindValue(':ip',$this->ip);
$stmt->bindValue(':rede',$this->rede);
$stmt->bindValue(':localizacao',$this->localizacao);
$stmt->bindValue(':observacao',$this->observacao);
$stmt->execute();
$id_servidor = $conexao->lastInsertId();
foreach ($this->funcao as $id_funcao)
{
$query = "INSERT INTO servidor_funcao(cod_servidor,cod_funcao) VALUES (:id_servidor, :id_funcao)";
$conexao = Conexao::pegarConexao();
$stmt->bindValue(':id_servidor',$id_servidor);
$stmt->bindValue(':id_funcao',$id_funcao); // linha 94
$stmt->execute();
}
foreach ($this->interface as $id_interface)
{
$query = "INSERT INTO servidor_interface(cod_servidor,cod_interface) VALUES (:id_servidor, :id_interface)";
$conexao = Conexao::pegarConexao();
$stmt->bindValue(':id_servidor',$id_servidor);
$stmt->bindValue(':id_interface',$id_interface);
$stmt->execute();
}
}