Ir para conteúdo
Fórum Script Brasil
  • 0

Create Table


Rastazituh

Pergunta

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

  • 0
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.

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 Apache

e criar as tabelas sem comando, se não for isso me desculpe...

valeu

guilherme

Link para o comentário
Compartilhar em outros sites

  • 0

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 wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 ?

Link para o comentário
Compartilhar em outros sites

  • 0

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).

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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>";

Link para o comentário
Compartilhar em outros sites

  • 0

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>";

?>

Link para o comentário
Compartilhar em outros sites

  • 0

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 $sql

Isto vai nos ajudar a debugar seu código... aí você fala pra gente o que tá sendo impresso na tela.

Até mais...

Link para o comentário
Compartilhar em outros sites

  • 0

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'.

Link para o comentário
Compartilhar em outros sites

  • 0

Era isso mesmo... smile.gif 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)"

Link para o comentário
Compartilhar em outros sites

  • 0

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 ! biggrin.gif 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.

Link para o comentário
Compartilhar em outros sites

  • 0
Era isso mesmo... smile.gif 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 ali

deve se isso rolleyes.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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 !!!! biggrin.gif

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...