• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dieneces

SQL - insert com select + variaveis

10 mensagens neste tópico

Boas pessoal,

Alguem me consegue dizer porque é que se corre este insert funciona:

$q = "INSERT INTO player (Nome, user_password, email, Classe, HP, MP, STRH,INTE, registration_date) values ('$un', SHA1('$p'), '$e', '$cls', '$hp', '$mp', '$f', (SELECT INTEC FROM classes WHERE classeID='$cls'), NOW())";

Mas se correr este não:

$q = "INSERT INTO player (Nome, user_password, email, Classe, HP, MP, STRH,INTE, DEF, DEX, registration_date) values ('$un', SHA1('$p'), '$e', '$cls', '$hp', '$mp', '$f', (SELECT INTEC, DEFC, DEXC FROM classes WHERE classeID='$cls'), NOW())";

Aliás eu sei porque é que nao funciona... o problema é que ele não vai buscar os ultimos dois valores do select (neste caso DEFC e DEXC) dai o erro:

“Column count doesn't match value count at row 1”

A minha questão é a seguinte:

É possivel correr um insert com select neste caso em que tenho variaveis á mistura? Ou melhor, é possivel fazer com que o select vá buscar mais que um campo?

Desculpem lá se a resposta for demasiadamente basica, mas comecei a aprender SQL e PHP há pouco tempo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quantas colunas tem a tabela?

ele não "sabe" inserir 11 valores numa tabela que apenas tem 9 colunas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas a tabela têm 12 colunas. Dessas doze estou a tentar inserir 11:

(Nome, user_password, email, Classe, HP, MP, STRH,INTE, DEF, DEX, registration_date).

No entanto não estou a inserir um pois o valor será 0 que é o default.

No entanto com o select que estou a usar ele vai buscar os 3 campos para fazer as 11 colunas também:

values ('$un', SHA1('$p'), '$e', '$cls', '$hp', '$mp', '$f', (SELECT INTEC, DEFC, DEXC FROM classes WHERE classeID='$cls'), NOW())

Ou melhor supostamente era a conclusão que eu tirava... no entanto de certeza que ao por SELECT INTEC, DEFC, DEXC ele está a fazer algo diferente.

Estava-me a faltar algo.... lol

EU sei que é algo que está a tentar ser inserido a mais no entanto não entendo como....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então indica quais vais inserir e onde:

"INSERT INTO tabela (campo1, campo2, etc) VALUES (valor1, valor2, etc)"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só agora é que vi bem a tua questão, faz um select para cada variável, há soluções melhores mas esta para já deve resolver o teu problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois... é isso que eu penso estar a fazer quando dou os 11 VALUES:

values ('$un', SHA1('$p'), '$e', '$cls', '$hp', '$mp', '$f', (SELECT INTEC, DEFC, DEXC FROM classes WHERE classeID='$cls'), NOW())

Ou melhor eu penso que são 11 values, mas já estou a ver que não #) Pensei que ao fazer o "select INTE, DEFC, DEXC" estaria a por estes três values no "insert INTE, DEF, DEX," respectivamente.... dai funcionar se ao usar o select só com um campo (e se tirar os dois a mais do insert claro), e quando adiciono os outros dois campos ao select (e claro os dois campos no insert) deixa de funcionar. Dado que estou sem sombra de duvida a fazer insert a 11 valores, o erro apenas pode estar no numero de campos devolvido pelo select...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois... é isso que eu penso estar a fazer quando dou os 11 VALUES:

values ('$un', SHA1('$p'), '$e', '$cls', '$hp', '$mp', '$f', (SELECT INTEC, DEFC, DEXC FROM classes WHERE classeID='$cls'), NOW())

Ou melhor eu penso que são 11 values, mas já estou a ver que não #) Pensei que ao fazer o "select INTE, DEFC, DEXC" estaria a por estes três values no "insert INTE, DEF, DEX," respectivamente.... dai funcionar se ao usar o select só com um campo (e se tirar os dois a mais do insert claro), e quando adiciono os outros dois campos ao select (e claro os dois campos no insert) deixa de funcionar. Dado que estou sem sombra de duvida a fazer insert a 11 valores, o erro apenas pode estar no numero de campos devolvido pelo select...

Ahhh.... não sabia que se podia usar mais que um select por variavel.... Pois... de facto de certeza que haverá soluções melhores :P Mas vou tentar agora essa.  Muito obrigado pelas ultra rapidas respostas :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só agora é que vi bem a tua questão, faz um select para cada variável, há soluções melhores mas esta para já deve resolver o teu problema

Também não tinha reparado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem com os 3 selects funciona na perfeição!

No entanto, qual a maneira mais correcta de o fazer? podem dar umas luzes para ver se pesquiso mais sobre o assunto?

many thanks :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

3 selects implica ir 3 vezes à base de dados, o melhor será fazer um select antes, atribuir os valores lidos a variáveis e depois passá-los à query de insert

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora