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

(Resolvido) Inserir tabelas usando php com arquivo externo.


Igor Abdo

Pergunta

Não encontro na internet nenhum forum que resolva meu problema, preciso apenas ler um arquivo "db/base.sql" no servidor e executar uma query mysql para criar as tabelas no banco.

Do jeito que programei como mostra abaixo não deu certo :/

Existe algum jeito mais facil? O que fiz errado?

<?php
$servidor = "localhost";#CONFIGURE SEU HOST AQUI
$user = "base_1";#USUARIO DO BANCO DE DADOS
$senha = "root";#SENHA DO BANCO DE DADOS
$db = "base_1";#BASE QUE OS DADOS SERAO EXPORTADOS

//executa a conexão com o banco, caso contrário mostra o erro ocorrido
$conn = mysql_connect($servidor,$user,$senha) or die (mysql_error());

//seleciona a base de dados daquela conexão, caso contrário mostra o erro ocorrido
$banco = mysql_select_db($db, $conn) or die(mysql_error());

//ABRE O ARQUIVO TXT
$ponteiro = fopen ("db/base.sql", "r");
//LÊ O ARQUIVO ATÉ CHEGAR AO FIM 
while (!feof ($ponteiro)) {
//LÊ UMA LINHA DO ARQUIVO
$linha = fgets($ponteiro);
//FECHA O PONTEIRO DO ARQUIVO
fclose ($ponteiro);

//consulta sql - inserção
$query = mysql_query($linha) or die(mysql_error());

//fecha a conexão com o banco
mysql_close($conexao);
}//FECHA WHILE

?>

Editado por Igor Abdo
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
Que erro retorna?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"zones" (' at line 1

Conteúdo do arquivo base.sql:

CREATE TABLE "zones" (
                "id" INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                "nome" VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( "id" )
           )
Com o código abaixo roda normal, o problema é que quando eu chamo o arquivo base.sql externo é que não roda.
<?php
$servidor = "localhost";#CONFIGURE SEU HOST AQUI
$user = "base_1";#USUARIO DO BANCO DE DADOS
$senha = "root";#SENHA DO BANCO DE DADOS
$db = "base_1";#BASE QUE OS DADOS SERAO EXPORTADOS

//executa a conexão com o banco, caso contrário mostra o erro ocorrido
$conn = mysql_connect($servidor,$user,$senha) or die (mysql_error());

//seleciona a base de dados daquela conexão, caso contrário mostra o erro ocorrido
$banco = mysql_select_db($db, $conn) or die(mysql_error());


$linha = "CREATE TABLE zones (
                id INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                nome VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( id )
           )";

//consulta sql - inserção
$query = mysql_query($linha) or die(mysql_error());


?>

Editado por Igor Abdo
Link para o comentário
Compartilhar em outros sites

  • 0
Que erro retorna?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"zones" (' at line 1

Conteúdo do arquivo base.sql:

CREATE TABLE "zones" (
                "id" INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                "nome" VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( "id" )
           )
Com o código abaixo roda normal, o problema é que quando eu chamo o arquivo base.sql externo é que não roda.
<?php
$servidor = "localhost";#CONFIGURE SEU HOST AQUI
$user = "base_1";#USUARIO DO BANCO DE DADOS
$senha = "root";#SENHA DO BANCO DE DADOS
$db = "base_1";#BASE QUE OS DADOS SERAO EXPORTADOS

//executa a conexão com o banco, caso contrário mostra o erro ocorrido
$conn = mysql_connect($servidor,$user,$senha) or die (mysql_error());

//seleciona a base de dados daquela conexão, caso contrário mostra o erro ocorrido
$banco = mysql_select_db($db, $conn) or die(mysql_error());


$linha = "CREATE TABLE "zones" (
                "id" INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                "nome" VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( "id" )
           )";

//consulta sql - inserção
$query = mysql_query($linha) or die(mysql_error());

//fecha a conexão com o banco
mysql_close($conexao);
}//FECHA WHILE

?>
tenta isso:
exec('mysql -u [usuario] --password="[senha]" nome_banco < [\arquivo.sql]');

Link para o comentário
Compartilhar em outros sites

  • 0
Que erro retorna?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"zones" (' at line 1

Conteúdo do arquivo base.sql:

CREATE TABLE "zones" (
                "id" INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                "nome" VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( "id" )
           )
Com o código abaixo roda normal, o problema é que quando eu chamo o arquivo base.sql externo é que não roda.
<?php
$servidor = "localhost";#CONFIGURE SEU HOST AQUI
$user = "base_1";#USUARIO DO BANCO DE DADOS
$senha = "root";#SENHA DO BANCO DE DADOS
$db = "base_1";#BASE QUE OS DADOS SERAO EXPORTADOS

//executa a conexão com o banco, caso contrário mostra o erro ocorrido
$conn = mysql_connect($servidor,$user,$senha) or die (mysql_error());

//seleciona a base de dados daquela conexão, caso contrário mostra o erro ocorrido
$banco = mysql_select_db($db, $conn) or die(mysql_error());


$linha = "CREATE TABLE "zones" (
                "id" INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
                "nome" VARCHAR( 150 ) NOT NULL,
                PRIMARY KEY ( "id" )
           )";

//consulta sql - inserção
$query = mysql_query($linha) or die(mysql_error());

//fecha a conexão com o banco
mysql_close($conexao);
}//FECHA WHILE

?>
tenta isso:
exec('mysql -u [usuario] --password="[senha]" nome_banco < [\arquivo.sql]');

Mas assim seria apenas por prompt de comando, eu preciso executar diretamente do script.

Link para o comentário
Compartilhar em outros sites

  • 0
O que eu quero é apenas enviar um arquivo .sql no servidor através de uma página php para o banco mysql, não existe nenhuma maneira?

A função exec(), é uma função nativa do php, você pode usar ela dentro do seu script para executar qualquer comando inclusive um mysql.

você não precisa abrir o arquivo no php, setar ponteiro, pegar linha etc.... o seu script esta no servidor, o banco também esta no servidor, o arquivo

também está no servidor, logo utilizando a função exec você consegue fazer o up desse arquivo para o banco rapidamente dentro do seu script =]

posso estar errado e não ter entendido o q você realmente quer, pelo que eu entendi ate agora isso vai te ajudar

Link para o comentário
Compartilhar em outros sites

  • 0
O que eu quero é apenas enviar um arquivo .sql no servidor através de uma página php para o banco mysql, não existe nenhuma maneira?

A função exec(), é uma função nativa do php, você pode usar ela dentro do seu script para executar qualquer comando inclusive um mysql.

você não precisa abrir o arquivo no php, setar ponteiro, pegar linha etc.... o seu script esta no servidor, o banco também esta no servidor, o arquivo

também está no servidor, logo utilizando a função exec você consegue fazer o up desse arquivo para o banco rapidamente dentro do seu script =]

posso estar errado e não ter entendido o q você realmente quer, pelo que eu entendi ate agora isso vai te ajudar

Não entendi como funciona a função exec(), no caso não preciso de conexao mysql.meusite.com.br? Como ficaria essa função com os dados de conexão que postei?

Criei um script que copia um site inteiro de um diretório para outro, porem preciso criar as mesmas tabelas desse site no banco com outro prefixo, ai pensei em deixar um arquivo base.sql no servidor e envia-lo para o banco de dados com outro prefixo toda vez que copiasse um site.

Link para o comentário
Compartilhar em outros sites

  • 0
O que eu quero é apenas enviar um arquivo .sql no servidor através de uma página php para o banco mysql, não existe nenhuma maneira?

A função exec(), é uma função nativa do php, você pode usar ela dentro do seu script para executar qualquer comando inclusive um mysql.

você não precisa abrir o arquivo no php, setar ponteiro, pegar linha etc.... o seu script esta no servidor, o banco também esta no servidor, o arquivo

também está no servidor, logo utilizando a função exec você consegue fazer o up desse arquivo para o banco rapidamente dentro do seu script =]

posso estar errado e não ter entendido o q você realmente quer, pelo que eu entendi ate agora isso vai te ajudar

Não entendi como funciona a função exec(), no caso não preciso de conexao mysql.meusite.com.br? Como ficaria essa função com os dados de conexão que postei?

Criei um script que copia um site inteiro de um diretório para outro, porem preciso criar as mesmas tabelas desse site no banco com outro prefixo, ai pensei em deixar um arquivo base.sql no servidor e envia-lo para o banco de dados com outro prefixo toda vez que copiasse um site.

Vamos imaginar assim:

PHP E MYSQL RODANDO NO SERVIDOR

-Arquivos no servidor na mesma pasta:

script.php

sql.sql

Conteudo dos aruqivos:

script.php ---->

//Adiciona a QUERY para a variavel
$qry = "CREATE TABLE minha_tabela2 (id INT NOT NULL AUTO_INCREMENT, nome VARCHAR(20) NOT NULL, PRIMARY KEY (id));";

//Abre o arquivo sql com permição para escrita
$fh = fopen('sql.sql','w+');

//Escreve o conteudo da variavel $qry no arquivo
fwrite($fh, $qry);

//fecha e salva o arquivo
fclose($fh);

//conecta no my sql por linha de comando e executa o conteudo do arquivo sql no banco selecionaddo(base_1) 
if(exec("mysql -u base_1 --password='root' base_1 < sql.sql")) echo "Erro";

sql.sql ------->

EM BRANCO

deu pra entender ? :unsure:

Link para o comentário
Compartilhar em outros sites

  • 0
O que eu quero é apenas enviar um arquivo .sql no servidor através de uma página php para o banco mysql, não existe nenhuma maneira?

A função exec(), é uma função nativa do php, você pode usar ela dentro do seu script para executar qualquer comando inclusive um mysql.

você não precisa abrir o arquivo no php, setar ponteiro, pegar linha etc.... o seu script esta no servidor, o banco também esta no servidor, o arquivo

também está no servidor, logo utilizando a função exec você consegue fazer o up desse arquivo para o banco rapidamente dentro do seu script =]

posso estar errado e não ter entendido o q você realmente quer, pelo que eu entendi ate agora isso vai te ajudar

Não entendi como funciona a função exec(), no caso não preciso de conexao mysql.meusite.com.br? Como ficaria essa função com os dados de conexão que postei?

Criei um script que copia um site inteiro de um diretório para outro, porem preciso criar as mesmas tabelas desse site no banco com outro prefixo, ai pensei em deixar um arquivo base.sql no servidor e envia-lo para o banco de dados com outro prefixo toda vez que copiasse um site.

Vamos imaginar assim:

PHP E MYSQL RODANDO NO SERVIDOR

-Arquivos no servidor na mesma pasta:

script.php

sql.sql

Conteudo dos aruqivos:

script.php ---->

//Adiciona a QUERY para a variavel
$qry = "CREATE TABLE minha_tabela2 (id INT NOT NULL AUTO_INCREMENT, nome VARCHAR(20) NOT NULL, PRIMARY KEY (id));";

//Abre o arquivo sql com permição para escrita
$fh = fopen('sql.sql','w+');

//Escreve o conteudo da variavel $qry no arquivo
fwrite($fh, $qry);

//fecha e salva o arquivo
fclose($fh);

//conecta no my sql por linha de comando e executa o conteudo do arquivo sql no banco selecionaddo(base_1) 
if(exec("mysql -u base_1 --password='root' base_1 < sql.sql")) echo "Erro";

sql.sql ------->

EM BRANCO

deu pra entender ? :unsure:

Entendi sim, muito bem explicado! Mas aqui retornou o erro:

Unable to fork [mysql -u base_1 --password='root' base_1 &lt; base.sql]

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pelas respostas no fórum, mas não obtive sucesso e decidi programar como mostra abaixo, funcionou:

<?php

$mysqli = new mysqli("localhost", "base_1", "root", "base_1");
$query = file_get_contents('E:\home\xxx\Web\data/theme/db/base.sql', true);
if (!query) {
echo "Arquivo .sql vazio";
}
elseif ($mysqli->multi_query($query)) {
do {

if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}

if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
//em caso de erro, exibe a mensagem
if (mysqli_warning_count($mysqli)) {
$e = mysqli_get_warnings($mysqli);
do {
echo "Warning: $e->errno: $e->message\n";
} while ($e->next());
} 
printf("Errormessage: %s\n", mysqli_error($mysqli));


?>

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...