Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal!
Estou com uma dúvida: geralmente para inseri no BD a gente usa -->>> INSERT INTO tabela (campo1, campo2)
VALUES (valor1, valor2)";
Mas quando se tem um cadastro com muitos campos pra serem inseridos eu preciso SEMPRE usar esse monte de coisa aí? :upset:
Pesquisei sobre o assunto, mas o conteúdo que eu achei não era exatamente sobre essa dúvida... <_<
Não precisa ensinar como fazer isso, se passar um tutorial, apostila, video aula, só passar o link... não quero pronto, entende? quero aprender um jeito mais fácil de fazer. :thumbsup:
Imagino que "TALVEZ" usar um array com os dados do formulario seja o correto, mas como "passar" esse array pro banco? :ermm:
Tem alguma forma "padrão" de fazer isso? :rolleyes:
Agradeço muito a força! B)
Entendi sim Bruno, mas não é bem essa a minha dúvida...
O que eu quero fazer é inserir VÁRIOS DADOS em VÁRIOS CAMPOS, mas APENAS um dado por campo, porém com uma escrita reduzida...
Deixa ver se explico melhor:
INSERT INTO tabela (campo1, campo2, campo3, campo4, campo5, campo6, (...), campo30) VALUES (valor1, valor2, valor3, valor4, valor5, valor6, (...), valor30)";
Isso fica MUITO CHATO e DEMORADO pra escrever... a minha ideia seria pegar esses 30 DADOS que estão vindo de um formulário e inserir na tabela com uma escrita mais REDUZIDA.
Algo tipo: ---> INSERT INTO tabela (array dos campos da tabela) VALUES (array dos dados do formulário)";
Eu tenho - quase - certeza que dá, mas o problema é que meu conhecimento ainda não me permite solucionar isso sozinho...
até é possível, mas ai vejo 2 problemas:
1. pq a tua tabela é tão grande horizontalmente ?
(foi bem modelada? está normalizada?)
2. você sabia que você pode suprimir a lista de colunas, desde que você ordene corretamente os valores?
"INSERT INTO tabela VALUES (valor1, valor2)";
para trabalhar da forma que você disse, com o array. você só precisa de um implode(), e pronto. O php vai formar a string completa para ti.
Seria isso o que você estaria procurando:
<?php
$data = array(
'column1' => 'value1',
'column2' => 'value2',
'column3' => 'value3',
'column4' => 'value4',
'column5' => 'value5',
);
printf(
'INSERT INTO `tabela` ( %s ) VALUES ( %s )',
sprintf( '`%s`', implode( '`, `', array_keys( $data ) ) ),
sprintf( "'%s'", implode( "', '", $data ) )
);
Saída (sem a quebra de linha):
INSERT INTO `tabela` ( `column1`, `column2`, `column3`, `column4`, `column5` )
VALUES ( 'value1', 'value2', 'value3', 'value4', 'value5' )tá incorreto Bruno, nos valores você deve colocar aspas, e não crase
INSERT INTO `tabela` ( `column1`, `column2`, `column3`, `column4`, `column5` )
VALUES ( 'value1', 'value2'...Bruno, seria isso mesmo... Mas a tua pergunta 1 é interessante! Um cadastro de cliente que terá dados como Nome, Cpf, Rg, Telefone1, Telefone2, Rua, numero, bairro, complemento, cep, email, senha... Não é desta forma que se faz? Não teve 30 campos, mas teve 20... Como se modela uma tabela com tantos dados?
Outra coisa, quando eu der o "implode" ele não pega a "crase", certo?
-- A inserção no BD não exige que tenha crase? -- Só exige na lista dos campos da tabela, né? Nos dados a serem inseridos precisa ter aspa simples ou não precisa ter nada?
hum... você já estudou sobre Formas Normais ?
Um 'problema' claro, está no 'telefone1' e 'telefone2'.
Se algum dia precisar de mais algum telefone, ai você terá telefone3, ou se sei lá, por algum motivo você quiser separar quem tem 'iPhone' por causa do facetime... esse modelo vai começar a naufragar.
Dá uma lida aqui:
http://wbruno.com.br/2011/03/29/afinal-o-que-e-entidade/
Existem 'desnormalizações' boas, desde que você saiba exatamente oque está fazendo, e tiver um motivo muito bom para fazê-la(performance).
Diga todos os campos que você tem.
o @Bruno Augusto, colocou o script de como usar o implode e o array:
Obrigado! Vou dar uma olhada nos links aí... Valeu!!!
Um cadastro de cliente que terá dados como Nome, Cpf, Rg, Telefone1, Telefone2, Rua, numero, bairro, complemento, cep, email,
modelagem...
tabela principal
person id person_name person_surname person_birt_date
tabela contato
contact id person_id tel cel email
para a questão principal, o post #5 + #6 como complemento.. onde tb responde a questão sobre a crase..
>
tá incorreto Bruno, nos valores você deve colocar aspas, e não crase
INSERT INTO `tabela` ( `column1`, `column2`, `column3`, `column4`, `column5` )
VALUES ( 'value1', 'value2'...
Sem disso, mas devido a tara por nomear os campos em inglês, eventualmente algum campo pode vir a ter o mesmo nome de alguma palavra reservada ao MySQL (só testei nele), sendo no qual, ao invés de aspas, deve-se usar crase.
Como meu sistema renderiza as strings léxicas automaticamente, não posso definir que campo X será envolto por aspas e campo Y por crases. Ou é um, ou é outro para todos, de forma configurável, é claro.
hein?!
não entendi nada doque você disse @Bruno.
Veja seu erro:
INSERT INTO `tabela` ( `column1`, `column2`, `column3`, `column4`, `column5` )
VALUES ( `value1`, `value2`, `value3`, `value4`, `value5` )
deveria ser assim:
INSERT INTO `tabela` ( `column1`, `column2`, `column3`, `column4`, `column5` )
VALUES ( 'value1', 'value2', 'value3', 'value4', 'value5' )
independente de você usar nomes em inglês ou não. Os valores devem ser envoltos por aspas e não por crases. Os nomes das tabelas e campos sim, devem ter crase.
Vamos supor que sua tabela seja assim:
id (com auto_increment),
nome e
senha
Você pode inserir assim:
"INSERT INTO tabela VALUES ('', '".$nome."', '".$senha."')";//se não quiser preencher algo, simplesmente deixe em branco, como o que fiz com o id, que é auto_increment
independente de você usar nomes em inglês ou não. Os valores devem ser envoltos por aspas e não por crases. Os nomes das tabelas e campos sim, devem ter crase.
Falha minha, perdão.
Um dia esse maldito contraste desse notebook velho acaba comigo.
Eu acho q uma solução viavel seria uma stored procedure no mysql eu trabalho assim e sempre foi flexivel pra mim principalmente na manutenção e tambem você nao precisa ficar escrevendo insert into nem o values toda hora seria algo assim no php:
$insere = "call sua_procedure(";
$insere .= "'".$_SESSION["nome"]."',";
$insere .= "'".$_SESSION["email"]."',";
$insere .= $_SESSION["teste"].")";
você pode fazer varios INSERTs em um só:
"INSERT INTO tabela (campo1, campo2) VALUES
(valor1, valor2),
(valor3, valor4),
(valor5, valor6),
inseri 4 linhas usando uma única query.