[PHP][MYSQL] .sql bestand downloaden en in de database stopp

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Een (100% betrouwbare) leverancier van gegevens, geeft mij de mogelijkheid om zijn gegevens in mijn eigen database te stoppen. deze gegevens veranderen elke week, maar de locatie van het .sql bestand online blijft ongewijzigd.

Hoe kan ik een gedownload .sql bestand in de database stoppen? het bestand bevat meer dan 3700 queries, elk op een eigen regel, ik kan natuurlijk door het hele bestand heen gaan loopen, maar dit lijkt me niet erg efficient.

Ik heb al even in de sourcecode van phpmyadmin gekeken, maar daar kom ik al helemaal niet uit.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Als je het maar eens per week doet maakt het niet veel uit of het erg snel is of niet.
Gewoon per regel naar de DB sturen. Kan je nog bijhouden of sommige queries het niet doen enzo, lekker makkelijk debuggen.
Is ie wel binnen 30 min mee klaar, gewoon in een cron draaien of met at als je windows gebruikt.

"Beauty is the ultimate defence against complexity." David Gelernter


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Je kan eens hier kijken. D'r staan iig een aantal interessante links, zoals je ws ook wel aan de titels kan zien.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 13:09

Kees

Serveradmin / BOFH / DoC
code:
1
mysqladmin -h [host] -u [user] -p [pass] -D [database] < file.sql

dat zou moeten werken :)

mysqladmin is uiteraard een programma en gaan functie

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 29-08 09:58
. (oops verkeerd gelezen)

[ Voor 94% gewijzigd door paulh op 15-08-2003 09:23 ]

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
alle oplossingen met mysqladmin zullen niet werken, omdat ik helaas geen ssh toegang heb tot de server, en geen cronjobs in kan stellen.

Acties:
  • 0 Henk 'm!

  • MikeN
  • Registratie: April 2001
  • Laatst online: 15-09 18:48
Verwijderd schreef op 15 August 2003 @ 10:03:
alle oplossingen met mysqladmin zullen niet werken, omdat ik helaas geen ssh toegang heb tot de server, en geen cronjobs in kan stellen.
Kun je de mysql server ook niet remote benaderen. Dus dat je verbinding maakt vanaf je eigen host naar die server en lokaal gewoon mysqladmin draait? Sommige providers hebben mysql namelijk gewoon naar buiten toe open staan.

Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
Dit is een zeer leuk probleem...

Zelf heb ik het opgelost door een 'sql' bestand zonder ;'s te maken waarbij 1 commando op 1 regel staat om het daarna regel voor regel in te voeren...
Voor personen die interesse hebben, ik gooi dat stukje code wel ff neer :
PHP:
1
2
3
4
5
6
    $sql=file('./primary.sql');
    $regels=count($sql);
    for ($i=1; $i<=$regels; $i++)
    {
        mysql_query($sql[$i]);
    }


Nu denk ik wel dat het mogelijk is (als je interesse heb) om een automatische standaard sql > dit soort SQL te maken.

(als er andere mogelijkheden zijn, ik houd me aanbevolen, dit is namelijk nogal veel werk met een bestand die 23 tabellen aanmaakt en daarna ze vult met > 500 records. Dit omdat ik er geen automatische parser bij heb en het in een tekstverwerker moet doen :( :/)

sebsoft.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Heb je wel root-toegang tot de mysql-database? Zoja, dan kun je zelf mysql zo instellen dat je er van buitenaf wel bijkunt. En dan kun je dus als nog mysqladmin gebruiken.

Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
Icheb schreef op 15 augustus 2003 @ 10:10:
Dit is een zeer leuk probleem...

Zelf heb ik het opgelost door een 'sql' bestand zonder ;'s te maken waarbij 1 commando op 1 regel staat om het daarna regel voor regel in te voeren...
Voor personen die interesse hebben, ik gooi dat stukje code wel ff neer :
PHP:
1
2
3
4
5
6
    $sql=file('./primary.sql');
    $regels=count($sql);
    for ($i=1; $i<=$regels; $i++)
    {
        mysql_query($sql[$i]);
    }


Nu denk ik wel dat het mogelijk is (als je interesse heb) om een automatische standaard sql > dit soort SQL te maken.

(als er andere mogelijkheden zijn, ik houd me aanbevolen, dit is namelijk nogal veel werk met een bestand die 23 tabellen aanmaakt en daarna ze vult met > 500 records. Dit omdat ik er geen automatische parser bij heb en het in een tekstverwerker moet doen :( :/)
in combinatie met insert delayed en een regexp om de ; aan het eind van de regel

weg te halen kan dit toch best goed werken?

Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
twiekert schreef op 15 August 2003 @ 11:24:
[...]
in combinatie met insert delayed en een regexp om de ; aan het eind van de regel

weg te halen kan dit toch best goed werken?
Dat zou best kunnen inderdaad, maar dan zit je wel met het probleem dat mysqldump (en anderen) de CREATE TABLE niet op 1 regel doen, dus als je dat erbij hebt zitten gaat het verkeerd...

(hmm, die regexp, daar had ik nog niet eens aan gedacht, tnx voor het idee, dan hoef ik voortaan niet meer de ; weg te halen :D)

sebsoft.nl


Acties:
  • 0 Henk 'm!

Verwijderd

ik heb het zo opgelost:

query
# -----------------------------------------------
query
#------------------------------------------------
query met
meerdere
regels
# -----------------------------------------------

Dus dat elke keer die # -- even lang is (word toch door me backup systeem gegenereerd dus dan is het importeren een eitje... exploden op ("# ----" en dan foreach { query }

Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
Icheb schreef op 16 August 2003 @ 09:32:
[...]


Dat zou best kunnen inderdaad, maar dan zit je wel met het probleem dat mysqldump (en anderen) de CREATE TABLE niet op 1 regel doen, dus als je dat erbij hebt zitten gaat het verkeerd...

(hmm, die regexp, daar had ik nog niet eens aan gedacht, tnx voor het idee, dan hoef ik voortaan niet meer de ; weg te halen :D)
dan moet je de lus wat intelligenter maken :P

pseudo code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (zolang er regels zijn) {
   if (regel begint met == CREATE TABLE ....) {
      $query = regel;

       for (zolang er regels zijn) {
          $query .= regel;
        
          if (huidige regel == einde van create table statement) {
            break;
          }
       }

   } else {
      $query = de huidige line;
     
   }


mysql_query($query);
}

Acties:
  • 0 Henk 'm!

  • QkE
  • Registratie: April 2002
  • Laatst online: 14-09 20:34

QkE

In your face Gnagna

Waarom kan je niet sowieso PHPmyadmin gebruiken?

Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
QkE schreef op 16 August 2003 @ 10:59:
Waarom kan je niet sowieso PHPmyadmin gebruiken?
Heb je al eens naar de code van phpmyadmin gekeken ?
Je bent dat (IMHO) meer tijd bezig met het zoeken naar en extracten van die code als het zelf maken van eigen code...

En proggen is toch geen uitdaging meer als je het niet zelf schrijft maar het gaat kopieren, of zie ik dit verkeerd ?

Of bedoel je voor het importeren ? - Ik denk dat het enigzinds automatisch moet gebeuren ipv handmatig met phpmyadmin... (net als de plaats waarvoor ik dat scriptje heb gepost, dat hoort bij de installatie van een CMS (alhoewel ik het nu ook voor iets anders ga gebruiken)) 8)
twiekert schreef op 16 August 2003 @ 10:49:
[...]


dan moet je de lus wat intelligenter maken :P

pseudo code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (zolang er regels zijn) {
   if (regel begint met == CREATE TABLE ....) {
      $query = regel;

       for (zolang er regels zijn) {
          $query .= regel;
        
          if (huidige regel == einde van create table statement) {
            break;
          }
       }

   } else {
      $query = de huidige line;
     
   }


mysql_query($query);
}
Laat ik dit eens gaan maken, at het me binnen een uurtje of 2 lukt post ik het wel ff
offtopic:
(ik heb mijn irc client ook aanstaan, en irc'en trekt me soms meer als proggen)

[ Voor 35% gewijzigd door Icheb op 16-08-2003 22:00 . Reden: extra reactie toegevoegd ]

sebsoft.nl


Acties:
  • 0 Henk 'm!

  • Icheb
  • Registratie: Augustus 2001
  • Laatst online: 17-09 22:48
OK, het lusje is klaar...
Alleen aan iedereen die het gaat gebruiken, de vraag om error reporting uit te laten, bij lege regels wilt hij nogal eens een error geven.

En voor de mensen die het in een commercieel project willen gebruiken, mijn rekeningnummer is 303026502 :D

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$sql=file('./primary.sql'); 
$regels=count($sql); 
for ($i=0; $i<=$regels; $i++) 
{ 
    if (substr($sql[$i],0,12)=="CREATE TABLE")
    {
        for($i; $i<=$regels; $i++)
        {
            $query.=$sql[$i];
            
            if (substr($sql[$i],-9,7)=="MyISAM;")
            {
                break;
            }
        }
    }
    else
    {
        $query = $sql[$i];
    }
    
    $query = eregi_replace(";","",$query);
    mysql_query($query); 
}


Zover ik weet kan hij op deze manier alle mysqldump en phpmyadmin files hebben

sebsoft.nl

Pagina: 1