digao_sk8 0 Denunciar post Postado Setembro 12, 2013 Tenho o seguinte codigo e me aparece sempre este error ( SQLSTATE[HY093]: Invalid parameter number: parameter was not defined ) ja faz ai uns dois dias que faço uma varredura e nada de encontrar peço uma ajuda a rapaziada do forum, se desvendarem esse erro ficarei muito grato.Postarei os seguintes codigos (do banco de dados que uso com o codigo ) e ( bendito codigo PDO php que me deixa doidao ); Codigo banco: create table posts( p_id int(11) not null AUTO_INCREMENT, p_idCategoria int(11) , p_idSubCategoria int(11) , p_img1 varchar(255), p_img2 varchar(255), p_img3 varchar(255), p_titulo varchar(255) , p_vitrine varchar(255) , p_descricaoSmall text, p_descricaoBig longtext, p_sistemaOperacional varchar(255), p_downloads varchar(255), p_siteOficial varchar(255), p_data datetime, p_video varchar(255), p_inst_deInstalacao longtext, p_tamanho varchar(255), p_licenca varchar(255), p_link32 varchar(255), p_link64 varchar(255), primary key(p_id) ); Codigo php: <?php require_once("conexaoPDO.php"); $categoria = @$_POST['categoria']; $subCategoria = @$_POST['subCategoria']; $imagem1 = @$_POST['imagem1']; $imagem2 = @$_POST['imagem2']; $imagem3 = @$_POST['imagem3']; $titulo = @$_POST['titulo']; $vitrine = @$_POST['vitrine']; $descricaoSmall = @$_POST['descricaoSmall']; $descricaoBig = @$_POST['descricaoBig']; $sistemaOperacional = @$_POST['sistemaOperacional']; $siteOficial = @$_POST['siteOficial']; $licenca = @$_POST['licenca']; $video = @$_POST['video']; $data = @$_POST['data']; $tamanho = @$_POST['tamanho']; $link32 = @$_POST['link32']; $link64 = @$_POST['link64']; $inst_DeInstalacao = @$_POST['inst_DeInstalacao']; $sqlInsert = "insert into posts(p_idCategoria,p_idSubCategoria,p_img1,p_img2,p_img3,p_titulo,p_vitrine,p_descricaoSmall,p_descricaoBig,p_sistemaOperacional,p_siteOficial,p_data,p_video,p_inst_deInstalacao,p_tamanho,p_licenca,p_link32,p_link64)"; $sqlInsert .="values (:categoria,:subCategoria,:imagem1,:imagem2,:imagem3,:titulo,:vitrine,:descricaoSmall,:descricaoBig,:sistemaOperacional,:siteOficial,:data,:video,:inst_DeInstalacao,:tamanho,:licenca,:link32,:link64)"; try{ $insertS = $conecta->prepare($sqlInsert); $insertS->bindValue(':P_idCategoria',$categoria,PDO::PARAM_STR); $insertS->bindValue(':P_idSubCategoria',$subCategoria,PDO::PARAM_STR); $insertS->bindValue(':P_img1',$imagem1,PDO::PARAM_STR); $insertS->bindValue(':P_img2',$imagem2,PDO::PARAM_STR); $insertS->bindValue(':P_img3',$imagem3,PDO::PARAM_STR); $insertS->bindValue(':P_titulo',$titulo,PDO::PARAM_STR); $insertS->bindValue(':P_vitrine',$vitrine,PDO::PARAM_STR); $insertS->bindValue(':P_descricaoSmall',$descricaoSmall,PDO::PARAM_STR); $insertS->bindValue(':P_descricaoBig',$descricaoBig,PDO::PARAM_STR); $insertS->bindValue(':P_sistemaOperacional',$sistemaOperacional,PDO::PARAM_STR); $insertS->bindValue(':P_siteOficial',$siteOficial,PDO::PARAM_STR); $insertS->bindValue(':P_data',$data,PDO::PARAM_STR); $insertS->bindValue(':P_video',$video,PDO::PARAM_STR); $insertS->bindValue(':P_inst_deInstalacao',$inst_DeInstalacao,PDO::PARAM_STR); $insertS->bindValue(':P_tamanho',$tamanho,PDO::PARAM_STR); $insertS->bindValue(':P_licenca',$licenca,PDO::PARAM_STR); $insertS->bindValue(':P_link32',$link32,PDO::PARAM_STR); $insertS->bindValue(':P_link64',$link64,PDO::PARAM_STR); $insertS->execute(); }catch(PDOexception $eInserir){print"<h3>Error ão inserir</h3> <br>" .$eInserir->getMessage();} ?> Compartilhar este post Link para o post Compartilhar em outros sites
André Luís Otto 23 Denunciar post Postado Setembro 12, 2013 no teu insert como tem um campo id que é auto tenque coloca=-lo no insert em branco mesmo hoje esta assim insert into posts(p_idCategoria deveria estar assim insert into posts('',p_idCategoria só lembrando no value tambem Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Setembro 12, 2013 Isso não deve fazer diferença, mas tente alterar essas duas linhas: $insertS->bindValue(':P_idCategoria', $categoria, PDO::PARAM_INT); $insertS->bindValue(':P_idSubCategoria', $subCategoria, PDO::PARAM_INT); Essas duas colunas são do tipo INT e você está usando PDO::PARAM_STR.Evite colocar estes "@" para esconder erros, isso não é uma boa prática de programação. Você precisa saber quais erros ocorrem.Faça uma validação para ver se a requisição foi feita via POST: if ($_SERVER['REQUEST_METHOD'] == 'POST') { no teu insert como tem um campo id que é auto tenque coloca=-lo no insert em branco mesmo O campo "p_id" não precisa ser colocado no INSERT, já que é AUTO_INCREMENT. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Setembro 12, 2013 ué o nome dos pametros na insert estão diferentes dos binds values (:categoria,:subCategoria,:imagem1 .... $insertS->bindValue(':P_idCategoria' $insertS->bindValue(':P_idSubCategoria' Compartilhar este post Link para o post Compartilhar em outros sites
André Luís Otto 23 Denunciar post Postado Setembro 12, 2013 só comentei pq ja tive problema com isso antes de usar orm Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Setembro 12, 2013 ué o nome dos pametros na insert estão diferentes dos binds Bem observado shini! Eu particularmente prefiro colocar um ponto de interrogação no prepared statement e depois passar os valores por array. Acho bem mais prático. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Setembro 12, 2013 Bem observado shini! Eu particularmente prefiro colocar um ponto de interrogação no prepared statement e depois passar os valores por array. Acho bem mais prático. Gosto de colocar nomes no parametros fica mais legivel, agora quando vc não sabe o numero de pametros pq é dinamico é melhor usar '?' e passar um array pro execute() só comentei pq ja tive problema com isso antes de usar orm que problema? qual orm? aqui tem problema com YII não se é o seu caso http://stackoverflow.com/questions/5874383/invalid-parameter-number-parameter-was-not-defined-inserting-data Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Setembro 12, 2013 Gosto de colocar nomes no parametros fica mais legivel, agora quando vc não sabe o numero de pametros pq é dinamico é melhor usar '?' e passar um array pro execute() Isso é verdade, além de ficar mais legível deve ser melhor em desempenho também, pois no método bindValue e bindParam da pra informar o tipo do campo, assim o PHP não precisa ficar tendo que descobrir qual o tipo do campo pra usar a formatação correta no SQL. Pra falar a verdade eu uso bem pouco o PDO (raramente), pois uso o Doctrine no ZF2 para sistemas maiores e para sistemas menores como sites eu comecei a usar recentemente o Eloquent com Laravel, que é super produtivo. :) Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 e ai galera pra ja agradecendo pela força ai ! mais deixando claro que os dois campos que estao la em cima ( :P_idCategoria) e ( :P_idSubCategoria) nao e o id da tabela e nao sao auto incremento, pois o id dessa tabela posts e auto incremento e nao precisa de passar valor no form . esses dois campos sao relacionado a uma tabela exterior que armazena o nome das categorias e no rabo dela uma outra tabela de sub categorias . ate agora nao consigo decifrar este problema ja fiz com mysqli e PDO mais esses dois dao sempre o mesmo problema ,mais o mysql_query->este sim nao deu defeito. lembrando ja passei os valores por array tambem mais nada sempre a mesma menssagem ->( SQLSTATE[HY093]: Invalid parameter number: parameter was not defined )........puts ... Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Setembro 12, 2013 vc deixou igual os nomes dos binds e dos parametros? Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 so fiz uma alteraçao nos dois primeiros campos la do bind (PDO::PARAM_INT) pois esse daqui eu dei mole mais nao era isso , puts brother ja estou com isso parado por dois dias e nada de achar a soluçao estou ficando fustrado com esse problema ,,,,,, Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Setembro 12, 2013 teste esse codigo aqui, $sqlInsert = "insert into posts(p_idCategoria,p_idSubCategoria,p_img1,p_img2,p_img3,p_titulo,p_vitrine,p_descricaoSmall,p_descricaoBig,p_sistemaOperacional,p_siteOficial,p_data,p_video,p_inst_deInstalacao,p_tamanho,p_licenca,p_link32,p_link64)"; $sqlInsert .="values (idCategoria, :idSubCategoria, :img1,:img2,:img3,:titulo,:vitrine,:descricaoSmall,:descricaoBig, :sistemaOperacional,:siteOficial, :data,:video,:inst_DeInstalacao,:tamanho,:licenca,:link32,:link64)"; try{ $insertS = $conecta->prepare($sqlInsert); $insertS->bindValue(':idCategoria',$categoria); $insertS->bindValue(':idSubCategoria',$subCategoria); $insertS->bindValue(':img1',$imagem1); $insertS->bindValue(':img2',$imagem2); $insertS->bindValue(':img3',$imagem3); $insertS->bindValue(':titulo',$titulo); $insertS->bindValue(':vitrine',$vitrine); $insertS->bindValue(':descricaoSmall',$descricaoSmall); $insertS->bindValue(':descricaoBig',$descricaoBig); $insertS->bindValue(':sistemaOperacional',$sistemaOperacional); $insertS->bindValue(':siteOficial',$siteOficial); $insertS->bindValue(':data',$data); $insertS->bindValue(':video',$video); $insertS->bindValue(':inst_deInstalacao',$inst_DeInstalacao); $insertS->bindValue(':tamanho',$tamanho); $insertS->bindValue(':licenca',$licenca); $insertS->bindValue(':link32',$link32); $insertS->bindValue(':link64',$link64); $insertS->execute(); Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 Continua com aquela menssagem de error ,ainda nao foi isso, axo que ja avia eliminado essa parte ja pois estou 2 dias com este problema deu tempo pra testar da direita a esquerda... obrigado assim mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Setembro 12, 2013 Faltou dois pontos aqui: values (idCategoria, Deixe assim: values (:idCategoria, Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 Faltou dois pontos aqui: values (idCategoria, Deixe assim: values (:idCategoria, tambem não e ainda isso. mas os pontos etavam certo não? esse problema e mais solido doque eu pensava tenho varios problema de vez e quando mais este me vai fazer largar a profissao..kk Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Setembro 12, 2013 bem no pior caso, faça o insert com uma coluna, depois com duas .... Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 bem no pior caso, faça o insert com uma coluna, depois com duas .... ja tentei inserir somente um registro , ja tirei exceptions e nada sempre o mesmo bendito erro........ Compartilhar este post Link para o post Compartilhar em outros sites
dochipis 6 Denunciar post Postado Setembro 12, 2013 No sql da tabela tem o campo : p_downloads varchar(255) Já no insert não, talvez seja isso, coloque o campo no insert e faça um teste. Compartilhar este post Link para o post Compartilhar em outros sites
digao_sk8 0 Denunciar post Postado Setembro 12, 2013 No sql da tabela tem o campo : p_downloads varchar(255) Já no insert não, talvez seja isso, coloque o campo no insert e faça um teste. vao ver se dar certo ainda nao fiz este procedimento mais a chance sera 10%..bora que vamo... não tem efeito algum pois p_downloads e um campo null... valeu assim mesmo Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Setembro 12, 2013 O seu formulário envia algum campo em forma de array? Eu dei uma pesquisada aqui sobre este erro e geralmente ocorre quando tenta passar um array no método bind. Compartilhar este post Link para o post Compartilhar em outros sites