Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viniciuscr

Abrindo arquivos .sql e inserindo no mysql

Recommended Posts

Ola pessoal, sei que esse topico ja dever te cido citado varias vezes, mas eu estou com dificuldades para entender, e tambem estou com alguns probleminhas adicionais.

 

Preciso fazer um script em php que leia um arquivo chamado "acessos.sql" nele encontra-se a seguinte estrutura:

 

-- phpMyAdmin SQL Dump
-- version 2.11.2.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Mar 31, 2008 at 05:53 PM
-- Server version: 5.0.41
-- PHP Version: 5.0.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `pmerechimrs`
--

-- --------------------------------------------------------

--
-- Table structure for table `ACESSOS`
--

CREATE TABLE `ACESSOS` (
  `ACE_IDACESSO` int(11) NOT NULL auto_increment,
  `ACE_DATA` date NOT NULL default '0000-00-00',
  `ACE_HORA` time NOT NULL default '00:00:00',
  `ACE_IP` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`ACE_IDACESSO`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=479811;

--
-- Dumping data for table `ACESSOS`
--

INSERT INTO `ACESSOS` VALUES(1, '2006-12-15', '14:58:10', '200.102.201.74');
INSERT INTO `ACESSOS` VALUES(2, '2006-12-15', '14:59:04', '200.102.74.40');

E segue com milhares de insert...

Pra completar o meu colega inseriu os primeiros 3372 inserts no braço, e não é nem 10% do total de inserts a ser dados.

 

Alguem podem e dar alguns dicas ou me auxiliar na criação so script?

 

Agradeço desde ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

abra o arquivo usando fopen

 

http://php.net/fopen

 

as linhas que iniciam com -- ou /* são linhas comentadas. todas as outras devem ser enviadas para execução da query.

 

 

ou utilize uma feramenta g´rafica como o mysqlfront, phpmyadmin , ems mysql, ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não tem acesso ao phpmyadmin ou algum programa cliente para o mysql?

tenho acesso ao phpadmin

mas ele só aceita carregar um arquivo de no max

2,4MB

e esse arquivo que preciso carregar é de mais de 30MB

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oloco...

Faça como o hinom disse, só que sete o timeout do php pra um tempo bem alto antes..

setar timeout?...

 

como seria entaum?

 

eu abro o arquivo com fopen

 

eu tenho que inserir linha por linha no banco? Como faço ele saber quando ele chegou ao final de instrução? quando ele encontrar o ";"?

como faço um delay entra cada inserção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que se fizer uma única mysql_query colocando todas as linhas deve dar certo, pois o MySQL entende que ; é fim de instrução.

Dessa forma não tem como pôr delay. E o timeout você põe no começo do arquivo:

 

// Limite de tempo do servidor para rodar o script (em milisegundos)

ini_set('max_execution_time ', '60000');

set_time_limit(60000);

 

Aí tú põe quantos segundos precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK pra conectar ao banco eu ja tinha uma boa noção.

Só não estou lembrado o que é aquela variavel "&id"

 

e ler o arquivo e inserir no banco com um timeout é algo que não sei como fazer

 

<?

$dbname="teste"; // banco de dados
$usuario=" "; // meu usuario
$password=" "; // senha

// Conecta ao servidor MySQL
if(!($id = mysql_connect("localhost",$usuario,$password))) {
   echo "Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.";
   exit;
}
//Seleciona o Banco de Dados
if(!($con=mysql_select_db($ACESSOS,$id))) { //o que seria essa id???
   echo "Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.";
   exit;
}
?>

Creio que se fizer uma única mysql_query colocando todas as linhas deve dar certo, pois o MySQL entende que ; é fim de instrução.

Dessa forma não tem como pôr delay. E o timeout você põe no começo do arquivo:

 

// Limite de tempo do servidor para rodar o script (em milisegundos)

ini_set('max_execution_time ', '60000');

set_time_limit(60000);

 

Aí tú põe quantos segundos precisa.

 

mas como vou saber quanto tempo ele deve ficar executando no servidor? OO'

inserindo umas 5mil linhas ele demora uns 10 segundo +-

 

se for inserir todas vai demorar minutos...

E provavelmente vai travar não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... o $id se refere ao link(conexão) do banco de dados.

Dá uma mudadinha:

 

<?php

// Limite de tempo do servidor para rodar o script (em milisegundos)
ini_set('max_execution_time ', '60000');
set_time_limit(60000);

// Define variáveis de conexão sendo host o IP de seu servidor do MySQL, user teu nome de usuário, pass é a senha e db é o banco de dados.
$host = "localhost";
$user = "root";
$pass = "";
$db = "teste";

// Conecta ao servidor MySQL
$link = mysql_connect($host, $user, $pass) or die("Não foi possível estabelecer uma conexão com o MySQL:</br>" . mysql_error());
		   mysql_select_db($db) or die("Erro ao selecionar banco de dados:<br/>" .mysql_error());

// Começa o código
// Aqui tú põe o fopen, depois faz a query, etc.

mysql_close();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?

// Limite de tempo do servidor para rodar o script (em milisegundos)
ini_set('max_execution_time ', '60000');
set_time_limit(60000);


$host = "localhost";
$user = "root";
$pass = "";
$db = "ACESSOS";

// Conecta ao servidor MySQL
$link = mysql_connect($host, $user, $pass) or die("Não foi possível estabelecer uma conexão com o MySQL:</br>" . mysql_error());
		   mysql_select_db($db) or die("Erro ao selecionar banco de dados:<br/>" .mysql_error());

$arquivo = fopen("C:\acessos.sql", "r");


sql_query( $arquivo, $link);

mysql_close();
?>

 

ele consegue escrever o "arquivo" ja formatado e com os insert ?

e não vai retornar erro ou tentar inserir um dado que ja existe no banco e então parar a execução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou ser bem sincero.. Não manjo fopen...

Mas nesse código tem um erro..

 

sql_query($arquivo,$link);

 

Muda para mysql_query($arquivo, $link) or die("Erro na query: <br/>" . mysql_error());

 

Assim ele chama corretamente a query e se der erro ele já retorna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não deu certo...

axo que travou :T

 

e no fim to quase terminando de inserir os dados manualmente.

 

mas a conexão com o banco esta OK

 

vou continuar tentando iserir os dados. em menos quantidades pra ver se funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.