Avatar billede Rune1983 Ekspert
21. marts 2019 - 08:41 Der er 4 kommentarer og
2 løsninger

Import af SQL fil. Ønsker kun insert data.

Jeg sidder og bøvler lidt med kun at importere data fra en SQL dump file.
Vil gerne undlade alt undtagen insert data.

Pt anvender jeg følgende i et PHP script som fungere perfakt.

$command='mysql -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' < ' .$mysqlImportFilename;

$output=array();

exec($command,$output,$worked);

switch($worked){
case 0:
    echo 'Import file ' .$mysqlImportFilename;
    echo 'Successfully imported to database ' .$mysqlDatabaseName;
    break;
case 1:
    echo 'THERE WAS AN ERROR DURING IMPORT.';
    break;
}

Er det muligt at ligge noget kode ind i import strengen som undlader alle de forespørgsler med Create table, Dropd table if EXIST, Create Trigger etc. Ønsker som sagt kun Insert forespørgsler.

Eller er det bedre at lave 2 dumbs af database. En med structure og en med data. Så man derved kan skille dem fra hinanden.
Avatar billede Slettet bruger
21. marts 2019 - 09:38 #1
du ønsker noget data ?
så er det nemmeste jo SELECT * FROM tabel.navn WHERE ?????
og herefter INSERT dette i den nye database
Avatar billede Rune1983 Ekspert
21. marts 2019 - 09:44 #2
I SQL dumb filen er der fx.

DROP TABLE IF EXISTS ...
CREATE TABLE ...
INSERT INTO ...
CREATE TRIGGER ...

Jeg ønsker kun INSERT INTO ... udført i import kaldet.
Avatar billede arne_v Ekspert
21. marts 2019 - 13:34 #3
Mit forslag er at holde opgaverne adskilt.

Saa:

A.php konverterer foobar_original.sql til foobar_new.sql hvor alt andet end INSERT er fjernet

B.php loader foobar_new.sql
Avatar billede Rune1983 Ekspert
21. marts 2019 - 14:00 #4
Det vil jeg arbejde hen imod Arne. Dog kunne det være rart hvis man bare kunne fortælle import kaldet at den skulle udføre Insert data.
Tror jeg vil prøve at arbejde hen mod at splitte Dump filen i 2 med Data og Struktur.
Avatar billede Jens U. Juniormester
21. marts 2019 - 21:55 #5
Din kommando, der indlæser sammensættes som en streng:

$command='mysql -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' < ' .$mysqlImportFilename;

Som bliver til en kommando a'la:

mysql -h <hostnavn> -u <brugernavn> -p<password> <databasenavn> < dump.sql

Kan vi antage at du kører kommandoen på en maskine, der har grep installeret, kunne kommandoen istedet være:
grep "INSERT INTO" dump.sql | mysql -h <hostnavn> -u <brugernavn> -p<password> <databasenavn>

hvilket kun vil sende linier indeholdende INSERT INTO til mysql, og det vil svare til at dine første PHP-linie skal omskrives til noget a'la

$command='grep "INSERT INTO" dump.sql | ' . $mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName;

Du kan alternativt bede mysqldump nøjes med at lave INSERT INTO statements med noget a'la:
mysqldump -h <hostnavn> -u <brugernavn> -p<password> --no-create-info --no-create-db --skip-triggers <databasenavn> > dump.sql
Avatar billede Rune1983 Ekspert
22. marts 2019 - 07:07 #6
Hej Jens U.
Det ser spændende ud. Vil jeg lige prøve at kigge nærmere på.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester