Ir para conteúdo

POWERED BY:

Arquivado

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

Michel Kuguio

SQLSTATE[HY093]: Invalid parameter number: number of bound variables d

Recommended Posts

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

 

alguem sabe se o pdo tem limite de dados para inserir?

a tabela tem 32 dados a ser cadastrado, porem só consigo cadastrar de 4 em 4 dados.

 

alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, esse erro é porque o número de named ou question mark placeholders é diferente da quantidade de items no array que você informou à PDOStatement::execute() OU "pendurou" com PDOSTatement::bindParam().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, esse erro é porque o número de named ou question mark placeholders é diferente da quantidade de items no array que você informou à PDOStatement::execute() OU "pendurou" com PDOSTatement::bindParam().

 

Pode parecer coisa de quem não quer admitir um erro, mas eu juro que era isso que quis dizer huhauehuahe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql_cadastra_anuncio_um = 'INSERT INTO	er_anuncios (nomefantasia,contato,endereco,telefoneum,telefonedois,telefonetres, numero, bairro, cidade, cep, email, msn, facebook, googleplus, orkut, twitter, site, ramosdeatividades, locaisdeatuacao, categoriasrelacionadas, descricaobreve, conteudo, cadastro, update, validacao, valor, keywords, Status, confirma, visto, visitas)';
	$sql_cadastra_anuncio_um .= 'VALUES	(:nomefantasia, :contato, :endereco, :telefoneum, :telefonedois, :telefonetres, :numero, bairro, :cidade, :cep, :email, :msn, :facebook, :googleplus, :orkut, :twitter, :site, :ramosdeatividades, :locaisdeatuacao, :categoriasrelacionadas, :descricaobreve, :conteudo, :cadastro, :update, :validacao, :valor, :keywords, :Status, :confirma, :visto, :visitas)';
	try{
		$query_Cadastra_anuncio_um = $conecta->prepare($sql_cadastra_anuncio_um);
		$query_Cadastra_anuncio_um->bindValue(':nomefantasia',$anuncio_titulo,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':contato',$anuncio_contato,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':endereco',$anuncio_endereco,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':telefoneum',$anuncio_tel,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':telefonedois',$anuncio_teldois,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':telefonetres',$anuncio_teltres,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':numero',$anuncio_number,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':bairro',$anuncio_bairro,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':cidade',$anuncio_Cidade_Local,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':cep',$anuncio_cep,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':email',$anuncio_titulo,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':msn',$anuncio_msn,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':facebook',$anuncio_face,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':googleplus',$anuncio_plus,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':orkut',$anuncio_ork,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':twitter',$anuncio_twi,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':site',$anuncio_site,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':ramosdeatividades',$anuncio_ramosdeatividades,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':locaisdeatuacao',$anuncio_locaisdeatuacao,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':categoriasrelacionadas',$anuncio_categoriasrelacionadas,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':descricaobreve',$anuncio_descricao,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':conteudo',$anuncio_detalhes,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':cadastro',$anuncio_CadastroData,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':update',$anuncio_UpdateData,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':validacao',$anuncio_FimData,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':valor',$anuncio_Valor,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':keywords',$anuncio_keywords,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':Status',$anuncio_Status,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':confirma',$anuncio_confirma,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':visto',$anuncio_keywords,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->bindValue(':visitas',$anuncio_visitas,PDO::PARAM_STR);
		$query_Cadastra_anuncio_um->execute();


		echo 'cadastro com sucesso';
		}catch(PDOexception $error_sql_cadastra_anuncio_um){ echo 'Não foi possivel conectar com o banco de dados'.$error_sql_cadastra_anuncio_um->getMessage();};

 

cara achei esquisito se eu coloco 4 itens funciona beleza, mas se coloco 5 da pau, se coloco tudo como ta ai mesma coisa pau...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de te ajudar a consertar, vou te ajudar a tornar o código mais eficiente.

 

Tá vendo esse monte de bindValue()? Apaga tudo. É! Apaga tudo!

 

Porém, no execute(), lá embaixo, você insere um array contendo N valores, tantos quantos necessários. Os ídices desse array serão os nomes que você definiu lá em cima, no prepare(), e os valores, as variáveis que estava usando no bindValue():

 

$query_Cadastra_anuncio_um->execute(

   array(

       ':nomefantasia' => $anuncio_titulo,
       ':contato' => $anuncio_contato

       // Continua...
   )
);

Muitas vezes só de fazer essa mudança já resolve muitos problemas relacionados aos placeholders. No seu caso não é garantia de que vá, mas além de ficar um código mais eficiente, ainda vai melhorar a legibilidade do seu código para podermos visualizar melhor outros possíveis problemas.

 

Claro, na próxima resposta, você posta esse código enxugado.

 

Não, esse erro é porque o número de named ou question mark placeholders é diferente da quantidade de items no array que você informou à PDOStatement::execute() OU "pendurou" com PDOSTatement::bindParam().

 

Pode parecer coisa de quem não quer admitir um erro, mas eu juro que era isso que quis dizer huhauehuahe...

Anhé? Percebi não. Se foi, então "iu". :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

o bairro esta sem dois pontos.

:numero, bairro, :cidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

o bairro esta sem dois pontos.

:numero, bairro, :cidade

depois q mudei isso deu outro erro,

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update,validacao,valor,keywords,Status,confirma,visto,visitas)VALUES ('Mskstudio' at line 1

 

 

vou tentar o lance do array

 

Antes de te ajudar a consertar, vou te ajudar a tornar o código mais eficiente.

 

Tá vendo esse monte de bindValue()? Apaga tudo. É! Apaga tudo!

 

Porém, no execute(), lá embaixo, você insere um array contendo N valores, tantos quantos necessários. Os ídices desse array serão os nomes que você definiu lá em cima, no prepare(), e os valores, as variáveis que estava usando no bindValue():

 

$query_Cadastra_anuncio_um->execute(

   array(

       ':nomefantasia' => $anuncio_titulo,
       ':contato' => $anuncio_contato

       // Continua...
   )
);

Muitas vezes só de fazer essa mudança já resolve muitos problemas relacionados aos placeholders. No seu caso não é garantia de que vá, mas além de ficar um código mais eficiente, ainda vai melhorar a legibilidade do seu código para podermos visualizar melhor outros possíveis problemas.

 

Claro, na próxima resposta, você posta esse código enxugado.

 

 

Anhé? Percebi não. Se foi, então "iu". :lol:

 

 

depois q mudei isso deu outro erro,

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update,validacao,valor,keywords,Status,confirma,visto,visitas)VALUES ('Mskstudio' at line 1

 

 

vou tentar o lance do array

achei o bendito erro, o campo update, nao pode ter o nome update, mudei na tabela para anuncioupdate, e nos bind e sql tb e funcionou. xD

agora achei legal o lance do array, ele traz alguma melhora de performance ou só fica mais fácil de entender o código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim porque você não precisa invocar diversas vezes o método bindValue().

 

Eu sempre gosto de usar o exemplo do karaokê, com aquela bolinha ridícula. Quanto maior for a letra da música, mais vezes a bolinha vai pular.

 

Cada invocação de método/função é um pulo da bolinha. Só que aqui, quanto mais ela pular, mais tempo levará para concluir a tarefa.

 

Toda e qualquer possibilidade de performance deve ser aproveitada. :thumbsup:

 

Mas a grande sacada de não se usar bindValue() é por causa do terceiro argumento dométodo,no qual você define manualmente o tipo. Pelo array essa detecção é automática, evitando que você trate alguma coisa da forma errada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tô com um erro parecido alguem ai pode ajudar ?

 

Ae galera como eu poderia resolver esse problema ? na hora de cadastrar aparecere a seguinte mensagem

 

Erro ao cadastrar SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

 

 

Esse é meu PHP de Insert com PDO

 

<?php
$anuncioTitulo = strip_tags(trim($_POST['titulo']));
$anuncioEndereco = strip_tags(trim($_POST['endereco']));
$anuncioNumero = strip_tags(trim($_POST['numero']));
$anuncioDdd = strip_tags(trim($_POST['ddd']));
$anuncioTelefone = strip_tags(trim($_POST['telefone']));
$anuncioCelular = strip_tags(trim($_POST['celular']));
$anuncioCep = strip_tags(trim($_POST['cep']));
$anuncioBairro = strip_tags(trim($_POST['bairro']));
$anuncioComplemento = strip_tags(trim($_POST['complemento']));
$anuncioEstado = strip_tags(trim($_POST['estado']));
$anuncioCidade = strip_tags(trim($_POST['cidade']));

$anuncioVisitas = '1';
$anuncioCadastro = date('Y-m-d H:m:s');
$anuncioUpdate = date('Y-m-d H:m:s');
$anuncioExpira = date('Y-m-d H:m:s',strtotime('+1 month'));
$anuncioStatus = 'pendente';


$imovelThumb = $_FILES['img'];
$imovelPasta = '../img/Anuncios/';
$imgPermitido = array('image/jpg','image/jpeg','image/pjpg');
$contarImg = count($imovelThumb['name']);
require("upload.php");

for($i=0;$i<$contarImg;$i++){

$imagemNome = $imovelThumb['name'][$i];
$imagemCaminho = $imovelThumb['tmp_name'][$i];
$imagemTipo = $imovelThumb['type'][$i];

if(!empty($imagemNome) && in_array($imagemTipo, $imgPermitido)){
   $nome = 'cliente='.$userId.'-'.md5(uniqid(rand(), true)).'.jpg';
   Redimensionar($imagemCaminho, $nome, 640, $imovelPasta);

   $sql_cadastraGuia  = 'INSERT INTO tabanuncios (anuncianteId, anuncioVisitas, anuncioTitulo, imovelThumb, anuncioEndereco, anuncioNumero, anuncioDdd, anuncioTelefone, anuncioCelular, anuncioCep, anuncioBairro, anuncioEstado, anuncioCidade, anuncioUpdate, anuncioExpira, anuncioStatus) ';
   $sql_cadastraGuia .= 'VALUES (:anuncianteId, :anuncioVisitas, :anuncioTitulo, :imovelThumb, :anuncioEndereco, :anuncioNumero, :anuncioDdd, :anuncioTelefone, :anuncioCelular, :anuncioCep, :anuncioBairro, :anuncioEstado, :anuncioCidade, :anuncioUpdate, :anuncioExpira, :anuncioStatus)';


   try{
	   $query_cadastraGuia = $conecta->prepare($sql_cadastraGuia);
	   $query_cadastraGuia->bindValue(':anuncianteId',$userId,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioVisitas',$anuncioVisitas,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioTitulo',$anuncioTitulo,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':imovelThumb',$nome,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioEndereco',$anuncioEndereco,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioNumero',$anuncioNumero,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioDdd',$anuncioDdd,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue('anuncioTelefone:',$anuncioTelefone,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioCelular',$anuncioCelular,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioCep',$anuncioCep,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioBairro',$anuncioBairro,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue('anuncioEstado:',$anuncioEstado,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioCidade',$anuncioCidade,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioUpdate',$anuncioUpdate,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioExpira',$anuncioExpira,PDO::PARAM_STR);
	   $query_cadastraGuia->bindValue(':anuncioStatus',$anuncioStatus,PDO::PARAM_STR);
	   $query_cadastraGuia->execute();

	   echo ' Cadastro com Sucesso';
	   }catch(PDOexception $error_cadastraGuia){
		   echo ' Erro ao cadastrar '.$error_cadastraGuia->getMessage();
		   }

}
}
?> 

 

Essa é minha tabela do DB

-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Jun 26, 2012 as 01:04 PM
-- Versão do Servidor: 5.0.45
-- Versão do PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `cidadeon`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `tabanuncios`
--

CREATE TABLE IF NOT EXISTS `tabanuncios` (
 `anuncioId` int(11) NOT NULL auto_increment,
 `anuncianteId` varchar(255) NOT NULL,
 `anuncioVisitas` varchar(255) NOT NULL default '0',
 `anuncioTitulo` varchar(255) NOT NULL default '',
 `imovelThumb` varchar(255) NOT NULL,
 `anuncioEndereco` varchar(255) NOT NULL default '',
 `anuncioNumero` varchar(255) NOT NULL default '',
 `anuncioDdd` varchar(255) NOT NULL,
 `anuncioTelefone` varchar(255) NOT NULL default '',
 `anuncioCelular` varchar(255) NOT NULL,
 `anuncioCep` varchar(255) NOT NULL default '',
 `anuncioBairro` varchar(255) NOT NULL,
 `anuncioComplemento` varchar(255) NOT NULL,
 `anuncioEstado` varchar(255) NOT NULL,
 `anuncioCidade` varchar(255) NOT NULL,
 `anuncioCadastro` timestamp NOT NULL default CURRENT_TIMESTAMP,
 `anuncioUpdate` timestamp NOT NULL default '0000-00-00 00:00:00',
 `anuncioExpira` timestamp NOT NULL default '0000-00-00 00:00:00',
 `anuncioStatus` varchar(255) NOT NULL,
 `anuncioFacebook` varchar(255) NOT NULL,
 `anuncioTwitter` varchar(255) NOT NULL,
 `anuncioOrkut` varchar(255) NOT NULL,
 `anuncioSite` varchar(255) NOT NULL default '',
 `anuncioEmail` varchar(255) NOT NULL default '',
 `anuncioVideo` varchar(255) NOT NULL,
 `anuncioCategoria` int(11) NOT NULL,
 `anuncioResumo` text NOT NULL,
 `anuncioServicos` text NOT NULL,
 `anuncioImagem` varchar(255) NOT NULL default '',
 `anuncioCompleto` varchar(5) NOT NULL,
 `anuncioTags` text NOT NULL,
 `anuncioConfirma` varchar(255) default NULL,
 PRIMARY KEY  (`anuncioId`),
 UNIQUE KEY `id` (`anuncioId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=52 ;

--
-- Extraindo dados da tabela `tabanuncios`
--

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não quiser seguir as outras demais dicas, dá uma olhada nos placeholders anuncioTelefone e anuncioEstado

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.