Ir para conteúdo

POWERED BY:

Arquivado

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

gabrielfalieri

Invalid parameter number: parameter was not defined

Recommended Posts

Bom dia galera do Imasters.

Estou passando por esse erro, mas não consigo achar aonde está faltando parâmetro, ou onde a quantidade de parâmetro está errada.

 $sql = "INSERT INTO $this->prt_partner_responsible(id_resp,nome,cargo,tel_comercial1,tel_comercial2,tel_celular1,tel_celular2,email1,email2,nota,_id_partner,_ativo,_data_registro )
                                                        VALUES (NULL,:nome,:cargo,:tel_comercial1,:tel_comercial2,:tel_celular1,:tel_celular2,:email1,:email2,:nota,:_id_partner,:_ativo,:_data_registro )";
            $stmt = DB::prepare($sql);

            foreach($this->nomeResponsavel as $key => $values){
                $stmt->bindParam(":nome",$this->nomeResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":cargo",$this->cargoResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial1:",$this->telefoneComercialIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial2",$this->telefoneComercialIIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular1",$this->telefoneCelularIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular2",$this->telefoneCelularIIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":email1",$this->emaiIIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":email2",$this->emaiIIIResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":nota",$this->comentariosResp[$key],PDO::PARAM_STR);
                $stmt->bindParam(":_id_partner",$id,PDO::PARAM_INT  );
                $stmt->bindParam(":_ativo",$this->_ativo,PDO::PARAM_STR);
                $stmt->bindParam(":_data_registro",$this->_data_registro,PDO::PARAM_STR);

                $stmt->execute();
            }

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade, você está passando algum valor não definido no bindParam (que é passagem por referência). Mude para bindValue ou garanta que todos os parâmetros existam.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual linha aparece essa mensagem?

Notice: Undefined offset: 0 in C:\wamp\www\ecoLicenseLayout\classes\Partner.php on line 225

Notice: Undefined offset: 0 in C:\wamp\www\ecoLicenseLayout\classes\Partner.php on line 226

Notice: Undefined offset: 0 in C:\wamp\www\ecoLicenseLayout\classes\Partner.php on line 227

Notice: Undefined offset: 0 in C:\wamp\www\ecoLicenseLayout\classes\Partner.php on line 229

Notice: Undefined offset: 0 in C:\wamp\www\ecoLicenseLayout\classes\Partner.php on line 230

Que é equivalente as linhas, do telefone comercial 1, telefone comercial 2, celular 1, email 1 e email 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variável existir é diferente do valor estar definido. PDOStatement::bindParam() exige que o valor seja definido.

Agora corrija o acesso ao índice não existente e seja feliz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É apenas uma possibilidade. Outra é validar se o valor existe, caso não existir, envie um valor padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É apenas uma possibilidade. Outra é validar se o valor existe, caso não existir, envie um valor padrão.

isset($this->telefoneCelularIResp[$key]$this->telefoneCelularIResp[$key])

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP >= 7 (Null coalescing operator):

$var = $array[$key] ?? 'valor default'; 

PHP < 7 (Ternary Operator):

$var = isset($array[$key]) ? $array[$key] : 'valor default'; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca dentro do foreach ne?

Mesmo dentro do foreach, com bindParam e bindValue da o erro: SQLSTATE[HY093]: Invalid parameter number: parameter was not definedErro n�: HY093

 foreach($this->nomeResponsavel as $key => $values){
                $telefoneComercial1Resp = isset($this->telefoneComercial1Resp[$key]) ? $this->telefoneComercial1Resp[$key] : '0';
                $telefoneComercial2Resp = isset($this->telefoneComercial2Resp[$key]) ? $this->telefoneComercial2Resp[$key] : '0';
                $celComercial1Resp = isset($this->telefoneCelularIResp[$key]) ? $this->telefoneCelularIResp[$key] : '0';
                $celComercial2Resp = isset($this->telefoneCelularIIResp[$key]) ? $this->telefoneCelularIIResp[$key] : '0';
                $email1Resp = isset($this->email1Resp[$key]) ? $this->email1Resp[$key] : '';
                $email2Resp = isset($this->emaiI2Resp[$key]) ? $this->emaiI2Resp[$key] : '';
                $comentario = isset($this->comentariosResp[$key]) ? $this->comentariosResp[$key] : '';
                $stmt->bindParam(":nome",$this->nomeResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":cargo",$this->cargoResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial1:",$telefoneComercial1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial2",$telefoneComercial2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular1",$celComercial1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular2",$celComercial2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":email1",$email1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":email2",$email2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":nota",$comentario,PDO::PARAM_STR);
                $stmt->bindParam(":id_partner",$id,PDO::PARAM_INT);
                $stmt->bindParam(":ativo",$this->_ativo,PDO::PARAM_STR);
                $stmt->bindParam(":data_registro",$this->_data_registro,PDO::PARAM_STR);

                 $stmt->execute();
            }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o var_dump da variável $sql, tem algo estranho com ela.

Compartilhar este post


Link para o post
Compartilhar em outros sites


string 'INSERT INTO prt_partner_responsible(id_resp,nome,cargo,tel_comercial1,tel_comercial2,tel_celular1,tel_celular2,email1,email2,nota,_id_partner,_ativo,_data_registro )

VALUES (NULL,:nome,:cargo,:tel_comercial1,:tel_comercial2,:tel_celular1,:tel_celular2,:email1,:email2,:nota,:id_partner,:ativo,:data_registro )' (length=365)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi o que eu imaginei. Named Placeholders não podem iniciar com "_" após o token, logo, isso:

':_id_partner'

Se torna isso:

':id_partner'

Como pode ver no próprio var_dump.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  foreach($this->nomeResponsavel as $key => $values){
                $telefoneComercial1Resp = isset($this->telefoneComercial1Resp[$key]) ? $this->telefoneComercial1Resp[$key] : '0';
                $telefoneComercial2Resp = isset($this->telefoneComercial2Resp[$key]) ? $this->telefoneComercial2Resp[$key] : '0';
                $celComercial1Resp = isset($this->telefoneCelularIResp[$key]) ? $this->telefoneCelularIResp[$key] : '0';
                $celComercial2Resp = isset($this->telefoneCelularIIResp[$key]) ? $this->telefoneCelularIIResp[$key] : '0';
                $email1Resp = isset($this->email1Resp[$key]) ? $this->email1Resp[$key] : '0';
                $email2Resp = isset($this->emaiI2Resp[$key]) ? $this->emaiI2Resp[$key] : '0';
                $comentario = isset($this->comentariosResp[$key]) ? $this->comentariosResp[$key] : '0';
                $stmt->bindParam(":nome",$this->nomeResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":cargo",$this->cargoResponsavel[$key],PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial1:",$telefoneComercial1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_comercial2",$telefoneComercial2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular1",$celComercial1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":tel_celular2",$celComercial2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":email1",$email1Resp,PDO::PARAM_STR);
                $stmt->bindParam(":email2",$email2Resp,PDO::PARAM_STR);
                $stmt->bindParam(":nota",$comentario,PDO::PARAM_STR);
                $stmt->bindParam(":id_partner",$id,PDO::PARAM_INT);
                $stmt->bindParam(":ativo",$this->_ativo,PDO::PARAM_STR);
                $stmt->bindParam(":data_registro",$this->_data_registro,PDO::PARAM_STR);
                

                return $stmt->execute();
            }

Olha como está

   try {
            $sql = "INSERT INTO $this->prt_partner (id_partner,razao_social,cnpj,insc_estadual,insc_municipal,end_logradouro,end_numero,end_complemento,end_bairro, end_cidade,end_estado,end_cep,tel_comercial,email_comercial,siteweb,tipo_nengocio,retem_iss,_ativo,_data_registro)
                                            VALUES(NULL,:razao_social,:cnpj,:insc_estadual,:insc_municipal,:end_logradouro,:end_numero,:end_complemento,:end_bairro,:end_cidade,:end_estado, :end_cep,:tel_comercial,:email_comercial,:siteweb,:tipo_nengocio,:retem_iss,:ativo,:data_registro)";
            $stmt = DB::prepare($sql);
            $stmt->bindParam(":razao_social",$this->razaoSocial,PDO::PARAM_STR);
            $stmt->bindParam(":cnpj",$this->cnpj, PDO::PARAM_STR);
            $stmt->bindParam(":insc_estadual",$this->inscricaoEstadual, PDO::PARAM_STR);
            $stmt->bindParam(":insc_municipal",$this->inscricaoMunicipal, PDO::PARAM_STR);
            $stmt->bindParam(":end_logradouro",$this->logradouro, PDO::PARAM_STR);
            $stmt->bindParam(":end_numero",$this->numero, PDO::PARAM_STR);
            $stmt->bindParam(":end_complemento",$this->complemento, PDO::PARAM_STR);
            $stmt->bindParam(":end_bairro",$this->bairro, PDO::PARAM_STR);
            $stmt->bindParam(":end_cidade",$this->cidade, PDO::PARAM_STR);
            $stmt->bindParam(":end_estado",$this->estado, PDO::PARAM_STR);
            $stmt->bindParam(":end_cep",$this->cep, PDO::PARAM_STR);
            $stmt->bindParam(":tel_comercial",$this->telefoneComercial, PDO::PARAM_STR);
            $stmt->bindParam(":email_comercial",$this->emailComercial, PDO::PARAM_STR);
            $stmt->bindParam(":siteweb",$this->site, PDO::PARAM_STR);
            $stmt->bindParam(":tipo_nengocio",$this->tipoNengocio, PDO::PARAM_STR);
            $stmt->bindParam(":retem_iss",$this->retemISS, PDO::PARAM_STR);
            $stmt->bindParam(":ativo",$this->ativo, PDO::PARAM_STR);
            $stmt->bindParam(":data_registro",$this->data_registro, PDO::PARAM_STR);

            return $stmt->execute();
        }

Até tirei o "_" de todas as variáveis

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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