Rastazituh Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 Boas !O assunto que me traz aqui hoje é o seguinte: a função do PHP CREATE TABLE pode ser antecedida por uma variável ? E tem de ter algum comando para a executar (como a Query das pesquisas) ?Exemplos:$sql = "CREATE TABLE x ( ... )";ou apenasCREATE TABLE x ( ... );Aguardo resposta. Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guilherme014 Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 Boas !O assunto que me traz aqui hoje é o seguinte: a função do PHP CREATE TABLE pode ser antecedida por uma variável ? E tem de ter algum comando para a executar (como a Query das pesquisas) ?Exemplos:$sql = "CREATE TABLE x ( ... )";ou apenasCREATE TABLE x ( ... );Aguardo resposta. Obrigado. eu nunca fiz isto não..você usa o banco de dados mysql.....se for é so ir ao 127.0.0.1/phpmyadmin, depois de iniciar o Apachee criar as tabelas sem comando, se não for isso me desculpe...valeuguilherme Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 lemissel Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 cara, isso no é função do php e sim um comando sql, antigamente tinha a mysql_db_create, mas não sei por q cargas d'agua eles preferiram usar o comando mysql como uma consulta...podes atribuir a uma vairável sim, e depois coloca essa variável como parâmetro na query Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 Exatamente como o lemissel falou, CREATE TABLE não é uma função do PHP, mas sim um comando SQL... que você pode executar pelo PHP. Entendeu? E você executa pelo PHP como se fosse uma query, normal... (tipo SELECT, INSERT...).Então você cria esse comando da mesma forma: monta ele numa string (que você pode associar a uma variável pra ficar mais fácil) e executa a query. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 3, 2005 Autor Denunciar Share Postado Fevereiro 3, 2005 Eu tenho isto:// Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos'$nome_categoria_tabela' ( id_categoria INT NOT NULL DEFAULT '$id2', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )" or die ("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>"); Agora, porque não funciona ? Preciso de executar por Query ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 Cara, você não pode fazer isso:$string = "sequencia de caracteres" OR DIE "mensagem de erro";Sacou o que você tá tentando fazer? você tem que utilizar o "OR DIE" após uma função que possa retornar o valor booleano "false" (que é quando seria executado o código após essa instrução... quando a função retornasse "false").você teria que usar ela após o mysql_query()... (isto é, se você estiver usando MySQL). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 3, 2005 Autor Denunciar Share Postado Fevereiro 3, 2005 Hum.. Eu fui à procura no manual de PHP e não encontrei nenuma função do género 'mysql_query' para criar as tabelas. Não consigo mesmo descobrir qual é.. Alguém me pode dizer ?UPDATE: Desculpe esta mensagem, só agora é que vi a última parte do seu post =) Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 3, 2005 Autor Denunciar Share Postado Fevereiro 3, 2005 Bem, tentei novamente mas não consegui, repare:$sql2 = "CREATE TABLE titulos'$nome_categoria_tabela' ( id_categoria INT NOT NULL DEFAULT '$id2', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )"; $resultado2 = mysql_query($sql2) or die ("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>"); Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Fevereiro 3, 2005 Denunciar Share Postado Fevereiro 3, 2005 Faz assim:... OR DIE mysql_error();Aí você fala qual a mensagem de erro que está sendo mostrada.Falou! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 3, 2005 Autor Denunciar Share Postado Fevereiro 3, 2005 Ah, desculpe lá tudo isto mas.. Continua sem funcionar ! Bem, eu vou postar aqui a parte do código que não funciona após reformulada. Obrigado pela sua ajuda.// Pesquisa o ID da nova categoria $pesquisa2 = "SELECT * FROM categorias$tema WHERE nome_categoria_tabela = '$nome_categoria_tabela'"; $query2 = mysql_query($pesquisa2); $linha2 = mysql_fetch_array($query2); // Especificar os campos $id2 = $linha['id_categoria']; // Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos'$nome_categoria_tabela' ( id_categoria INT NOT NULL DEFAULT '$id2', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )"; $resultado2 = mysql_query($sql2) OR DIE mysql_error("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>"); echo "<font size=\"2\" face=\"Verdana\" color=\"#000033\"><strong>Sucesso!</strong></font>"; echo "<BR>"; echo "<font size=\"1\" face=\"Verdana\" color=\"#000033\">Nova categoria adicionada à Base de Dados.</font>"; echo "<BR>"; echo "<a href=\"index2.php\"><font size=\"1\" face=\"Verdana\" color=\"#000033\">>> Regressar ao Sistema de Conteúdos Nimbus</font></a>"; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 blood Postado Fevereiro 4, 2005 Denunciar Share Postado Fevereiro 4, 2005 tenta $sql2 = "...." or die(mysql_error()); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 4, 2005 Autor Denunciar Share Postado Fevereiro 4, 2005 O facto é que dá sucesso, mas a tabela não é adicionada.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 blood Postado Fevereiro 4, 2005 Denunciar Share Postado Fevereiro 4, 2005 essa var... $nome_categoria_tabelada onde vem.. ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 4, 2005 Autor Denunciar Share Postado Fevereiro 4, 2005 De um input de um formulário. Vou colocar aqui todo o código.Portanto: o $id é enviado pela página anterior e o $nome_categoria e $nome_categoria_tabela são campos de formulário.<?php // Conexão com a Base de Dados require "comum.php"; // Pesquisa o nome do tema no qual a categoria será inserida $pesquisa = "SELECT * FROM temas WHERE id = '$id'"; $query = mysql_query($pesquisa); $linha = mysql_fetch_array($query); // Especificar os campos $tema = $linha['nome_tema_tabela']; // Insere a categoria na tabela correcta $sql = "INSERT INTO categorias$tema (id, nome_categoria, nome_categoria_tabela) VALUES ('$id', '$nome_categoria', '$nome_categoria_tabela')"; $resultado = mysql_query($sql); // Pesquisa o ID da nova categoria $pesquisa2 = "SELECT * FROM categorias$tema WHERE nome_categoria_tabela = '$nome_categoria_tabela'"; $query2 = mysql_query($pesquisa2); $linha2 = mysql_fetch_array($query2); // Especificar os campos $id2 = $linha['id_categoria']; // Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos'$nome_categoria_tabela' ( id_categoria INT NOT NULL DEFAULT '$id2', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )" or die(mysql_error("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>")); echo "<font size=\"2\" face=\"Verdana\" color=\"#000033\"><strong>Sucesso!</strong></font>"; echo "<BR>"; echo "<font size=\"1\" face=\"Verdana\" color=\"#000033\">Nova categoria adicionada à Base de Dados.</font>"; echo "<BR>"; echo "<a href=\"index2.php\"><font size=\"1\" face=\"Verdana\" color=\"#000033\">>> Regressar ao Sistema de Conteúdos Nimbus</font></a>"; ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 blood Postado Fevereiro 4, 2005 Denunciar Share Postado Fevereiro 4, 2005 então seria... $_POST['$nome_categoria_tabela'];? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 5, 2005 Autor Denunciar Share Postado Fevereiro 5, 2005 Isso significa que, ao criar o nome da tabela, tenho de utilizar essa variável superglobal ? O que é estranho é que, no INSERT, tudo funciona, mas no CREATE não.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Fevereiro 5, 2005 Denunciar Share Postado Fevereiro 5, 2005 Isso significa que, ao criar o nome da tabela, tenho de utilizar essa variável superglobal ? O que é estranho é que, no INSERT, tudo funciona, mas no CREATE não.. Sim, se o nome da tabela estiver vindo desse campo do formulário, você vai precisar fazer como o Blood falou.O fato do INSERT funcionar, mas do CREATE não, significa que você tá criando o CREATE com algum erro de sintaxe. Faça o seguinte: antes de executar a query com o CREATE, imprima a query na tela e pare a execução do script assim:exit($sql); // isto é, se você tiver criado a query CREATE na variável $sqlIsto vai nos ajudar a debugar seu código... aí você fala pra gente o que tá sendo impresso na tela.Até mais... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 5, 2005 Autor Denunciar Share Postado Fevereiro 5, 2005 Bem Illidan, não sei se era isto que queria, mas segue-se o código e a respectiva mensagem:// Pesquisa o ID da nova categoria $pesquisa2 = "SELECT * FROM categorias$tema WHERE nome_categoria_tabela = '$nome_categoria_tabela'"; $query2 = mysql_query($pesquisa2); $linha2 = mysql_fetch_array($query2); // Especificar os campos $id2 = $linha['id_categoria']; // Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos'$nome_categoria_tabela' ( id_categoria INT NOT NULL DEFAULT '$id2', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )"; print($sql2); exit($sql2);Mensagem que aparece:CREATE TABLE titulos'Extra' ( id_categoria INT NOT NULL DEFAULT '', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categoriasLivros (id_categoria) ON UPDATE CASCADE, )CREATE TABLE titulos'Extra' ( id_categoria INT NOT NULL DEFAULT '', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categoriasLivros (id_categoria) ON UPDATE CASCADE, )Obrigado pela ajuda.EDIT: Já descobri um dos erros, mas isto por culpa minha. A tabela deveria ser titulosExtra e não titulos'Extra'. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Illidan Postado Fevereiro 5, 2005 Denunciar Share Postado Fevereiro 5, 2005 Era isso mesmo... só que você imprimiou a $sql2 duas vezes, mas tudo bem... veja a cláusula CREATE TABLE que tá sendo criada:CREATE TABLE titulos'Extra' ( id_categoria INT NOT NULL DEFAULT '', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categoriasLivros (id_categoria) ON UPDATE CASCADE,)Não manjo muito de SQL, mas acho que sintaticamente ela está errada... entendeu porque o INSERT tá funcionando e o CREATE TABLE não?*** EDITANDO ***Um erro que descobri: você não tá passando o tamanho do campo integer: "INTEGER (11)" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 5, 2005 Autor Denunciar Share Postado Fevereiro 5, 2005 Bem, também não sei. Reformulei o código:// Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos$nome_categoria_tabela ( id_categoria INT (11) NOT NULL DEFAULT '$id2', id_titulo INT (11) NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )"; $resultado2 = mysql_query($sql2) or die("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>"); E para variar um pouco está a dar erro.. Mas não vou desistir ! Vou procurar na secção de MySQL aqui do Fórum a ver se encontro alguma coisa.. Hum.. Mas muito obrigado pela sua ajuda, Illidan ! Assim que conseguir posto o resultado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 blood Postado Fevereiro 5, 2005 Denunciar Share Postado Fevereiro 5, 2005 Era isso mesmo... só que você imprimiou a $sql2 duas vezes, mas tudo bem... veja a cláusula CREATE TABLE que tá sendo criada:CREATE TABLE titulos'Extra' ( id_categoria INT NOT NULL DEFAULT '', id_titulo INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categoriasLivros (id_categoria) ON UPDATE CASCADE,)Não manjo muito de SQL, mas acho que sintaticamente ela está errada... entendeu porque o INSERT tá funcionando e o CREATE TABLE não?*** EDITANDO ***Um erro que descobri: você não tá passando o tamanho do campo integer: "INTEGER (11)" eeh o INT ta sem nada alideve se isso Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rastazituh Postado Fevereiro 5, 2005 Autor Denunciar Share Postado Fevereiro 5, 2005 Bem, pesquisei e nada encontrei.. Já refiz a parte do INT, repare:// Adiciona nova tabela para a categoria $sql2 = "CREATE TABLE titulos$nome_categoria_tabela ( id_categoria INT (11) NOT NULL DEFAULT '$id2', id_titulo INT (11) NOT NULL PRIMARY KEY AUTO_INCREMENT, nome_titulo VARCHAR (250) NOT NULL, FOREIGN KEY (id_categoria) REFERENCES categorias$tema (id_categoria) ON UPDATE CASCADE, )"; $resultado2 = mysql_query($sql2) or die("<font size=\"1\" face=\"Verdana\" color=\"#000033\">Erro na gravação dos dados! Por favor, volte e verifique novamente os campos.</font>");Não é suposto serm assim ?** UPDATE **Consegui ! Bem, afinal tudo se devia a uma pequena vírgula no final do código MySQL que estava a atrapalhar tudo ! Faltam alguns detalhes, como definir o tipo de tabela, criar um índice para a Foreign Key e tentar perceber porque é que o DEFAULT do id_categoria não existe, mas isso são pormenores que se resolvem. Muito obrigado mesmo pela vossa ajuda !!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Rastazituh
Boas !
O assunto que me traz aqui hoje é o seguinte: a função do PHP CREATE TABLE pode ser antecedida por uma variável ? E tem de ter algum comando para a executar (como a Query das pesquisas) ?
Exemplos:
$sql = "CREATE TABLE x (
...
)";
ou apenas
CREATE TABLE x (
...
);
Aguardo resposta. Obrigado.
Link para o comentário
Compartilhar em outros sites
21 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.