Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Inserir tabelas usando php com arquivo externo.


Igor Abdo

Question

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

?>

Edited by Igor Abdo
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 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());


?>

Edited by Igor Abdo
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...