/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hjælp til php-genereret mysql-dump
Fra : Brian Emilius


Dato : 08-03-05 14:53

Hej NG

Jeg er i gang med at lave et script til at generere et
mysql-datadump. Hver entry skulle meget gerne stå på en linie for
sig, men i nogle tilfælde, når tabellen indeholder et felt af
datatypen 'text', kommer dumpet til at stå på flere linier alt
efter hvor mange \n der er i feltet.
Jeg har prøvet at fjerne \n og \r med str_replace, men det virker
ikke. Kan nogen hjælpe?

funktion til at lave datadumpet:

function datadump ($table) {
   $query = mysql_query("select * from $table");
   $num_fields = mysql_num_fields($query);
   while ($row = mysql_fetch_row($query)) {
      $result .= "INSERT INTO ".$table." VALUES(";
      for($j=0; $j<$num_fields; $j++){
         $row[$j] = addslashes($row[$j]);
         $row[$j] = str_replace("\n","\\n",$row[$j]);
         if(isset($row[$j])){
            $result .= "\"$row[$j]\"";
         }else{
            $result .= "\"\"";
         }
         if($j<($num_fields-1)){
            $result .= ",";
         }
      }
      $result .= ");\n";
   }
   $result = rtrim($result, "\r");
   return $result;
}
--
Venlig hilsen
Brian Emilius

 
 
Thomas Damgaard Niel~ (09-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 09-03-05 20:16

Brian Emilius wrote:

> Jeg er i gang med at lave et script til at generere et
> mysql-datadump. Hver entry skulle meget gerne stå på en linie for
> sig, men i nogle tilfælde, når tabellen indeholder et felt af
> datatypen 'text', kommer dumpet til at stå på flere linier alt
> efter hvor mange \n der er i feltet.
> Jeg har prøvet at fjerne \n og \r med str_replace, men det virker
> ikke. Kan nogen hjælpe?

Et \n betyder rent faktisk new line og derfor vil det stå på flere linier.
På UNIX-baserede systemer består et linieskift blot af et \n, på andre
systemer som f.eks. MS Windows består det af et \n efterfulgt af et \r
(carriage return). Mac har en helt tredie måde.
Hvorom alting er, så er det et tegn som på dit system betyder "ny
linie". Derfor vil det fylde flere linier.
Hvis det er meget vigtigt, at hver entry står kun fylder en linie, så
kan du måske lave en base-encoding på den til en base uden new line-tegn.

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Brian Emilius (09-03-2005)
Kommentar
Fra : Brian Emilius


Dato : 09-03-05 21:28

Thomas Damgaard Nielsen ytrede:
> Et \n betyder rent faktisk new line og derfor vil det stå på flere linier.
> På UNIX-baserede systemer består et linieskift blot af et \n, på andre
> systemer som f.eks. MS Windows består det af et \n efterfulgt af et \r
> (carriage return). Mac har en helt tredie måde.
> Hvorom alting er, så er det et tegn som på dit system betyder "ny
> linie". Derfor vil det fylde flere linier.
> Hvis det er meget vigtigt, at hver entry står kun fylder en linie, så
> kan du måske lave en base-encoding på den til en base uden new line-tegn.
>

Hej Thomas

Jeg skal lige være sikker på at jeg forstår dig rigtigt.
Siger du, at jeg skal sørge for at alle text-felterne (som udgør
problemet) får fjernet new-line (\n) i første omgang (altså, når
data'ene bliver puttet i felterne)?
Jeg er ikke sikker på jeg forstår det sidste du skrev om base-encoding.
Kan du ikke lige uddybe det lidt?

Tak for dit svar.

--
Venlig hilsen
Brian Emilius

Thomas Damgaard Niel~ (10-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 10-03-05 22:30

Brian Emilius wrote:
> Siger du, at jeg skal sørge for at alle text-felterne (som udgør
> problemet) får fjernet new-line (\n) i første omgang (altså, når
> data'ene bliver puttet i felterne)?

Ja.


> Jeg er ikke sikker på jeg forstår det sidste du skrev om base-encoding.
> Kan du ikke lige uddybe det lidt?

Base-encoding er en måde, hvorpå man kan fjerne new-line chars. Man
skifter til en lavere base som ikke indeholder de tegn som man ikke vil
have med.
Det er dog ikke altid hensigtsmæssigt, da det vil resultere i, at data
vil komme til at fylde mere efter konvertering til en lave base.
F.eks. hvis du konverterede det hele til base16 (hex), så vil det fylde
væsentligt mere (faktisk det dobbelte, hvis jeg regner rigtigt).
Men du vil nu være sikker på, dine data kun indeholder tegnene 0-9 samt A-F.

En anden ide kunne være, at erstatte newline med en bestemt streng, som
du ved ikke vil optræde ellers. Dette er dog farligt, da du skal være
helt sikker på, at den ikke vil optræde i dine data.

Jeg kan ikke lige på nuværende tidspunkt komme i tanke om bedre
løsninger, men måske andre kan?

Dog kunne jeg godt tænke mig at vide, hvorfor det er vigtigt, at de er
på maks en linie?

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Brian Emilius (13-03-2005)
Kommentar
Fra : Brian Emilius


Dato : 13-03-05 11:50

Thomas Damgaard Nielsen skrev:

> Jeg kan ikke lige på nuværende tidspunkt komme i tanke om bedre
> løsninger, men måske andre kan?
>
> Dog kunne jeg godt tænke mig at vide, hvorfor det er vigtigt, at de er
> på maks en linie?

Dumpet skal bruges som back-up, og skal indlæses til databasen vha. et
andet script - og jeg har ikke kunne finde anden løsning end at gå
igennem dump-filen linie for linie og udføre en mysql_query() for hver
linie.

--
Venlig hilsen
Brian Emilius

Thomas Damgaard Niel~ (13-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 13-03-05 13:55

Brian Emilius wrote:
>> Dog kunne jeg godt tænke mig at vide, hvorfor det er vigtigt, at de er
>> på maks en linie?
>
>
> Dumpet skal bruges som back-up, og skal indlæses til databasen vha. et
> andet script - og jeg har ikke kunne finde anden løsning end at gå
> igennem dump-filen linie for linie og udføre en mysql_query() for hver
> linie.

Hvilket system bruger du?
Jeg forstår ikke, at du ikke bare bruger noget i stil med
$ cat mysqldump.sql |mysql -uuser -p -hserver

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Brian Emilius (13-03-2005)
Kommentar
Fra : Brian Emilius


Dato : 13-03-05 14:32

Thomas Damgaard Nielsen skrev:
> Hvilket system bruger du?
> Jeg forstår ikke, at du ikke bare bruger noget i stil med
> $ cat mysqldump.sql |mysql -uuser -p -hserver

Serveren er Linux-platform, men det er meningen at brugere skal kunne
tage back-up af dele af databasen, uden at de kender noget til linux
eller mysql... Jeg er i bund og grund ved at lave en
system-back-up-funktion for dummies - altså "tryk her for at oprette
back-up" og "tryk her for at indlæse en tidligere back-up fil"

--
Venlig hilsen
Brian Emilius

Thomas Damgaard Niel~ (13-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 13-03-05 16:22

Brian Emilius wrote:
> Thomas Damgaard Nielsen skrev:
>
>> Hvilket system bruger du?
>> Jeg forstår ikke, at du ikke bare bruger noget i stil med
>> $ cat mysqldump.sql |mysql -uuser -p -hserver
>
>
> Serveren er Linux-platform, men det er meningen at brugere skal kunne
> tage back-up af dele af databasen, uden at de kender noget til linux
> eller mysql...

Brugerne behøver vel heller ikke kende noget til Linux eller MySQL, hvis
du laver et script, som kører system('cat mysqldump.sql |mysql -uuser -p
-hserver'); fra PHP?

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Brian Emilius (13-03-2005)
Kommentar
Fra : Brian Emilius


Dato : 13-03-05 17:35

Thomas Damgaard Nielsen skrev:

> Brugerne behøver vel heller ikke kende noget til Linux eller MySQL, hvis
> du laver et script, som kører system('cat mysqldump.sql |mysql -uuser -p
> -hserver'); fra PHP?

Nej, du har ret. Hvordan vælger jeg database i dit eksempel?

--
Venlig hilsen
Brian Emilius

Thomas Damgaard Niel~ (13-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 13-03-05 18:01

Brian Emilius wrote:
> Thomas Damgaard Nielsen skrev:
>
>> Brugerne behøver vel heller ikke kende noget til Linux eller MySQL,
>> hvis du laver et script, som kører system('cat mysqldump.sql |mysql
>> -uuser -p -hserver'); fra PHP?
>
>
> Nej, du har ret. Hvordan vælger jeg database i dit eksempel?
>

Svar på det og meget andet får du ved at skrive:
$ mysql --help

Den første linie efter copyright-notitsen siger:
Usage: mysql [OPTIONS] [database]

Mere info får du ved:
$ man mysql
eller
$ info mysql

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Brian Emilius (13-03-2005)
Kommentar
Fra : Brian Emilius


Dato : 13-03-05 18:13

Thomas Damgaard Nielsen skrev:
> Svar på det og meget andet får du ved at skrive:
> $ mysql --help
>
> Den første linie efter copyright-notitsen siger:
> Usage: mysql [OPTIONS] [database]
>
> Mere info får du ved:
> $ man mysql
> eller
> $ info mysql

Men nu "sidder" jeg ikke på serveren, så kan du ikke skrive, hvordan jeg
henter et dump af databasen "test" med brugernavn "user", password
"pass", server "server"?

--
Venlig hilsen
Brian Emilius

Ukendt (13-03-2005)
Kommentar
Fra : Ukendt


Dato : 13-03-05 18:16

Brian Emilius wrote:
> Men nu "sidder" jeg ikke på serveren, så kan du ikke skrive, hvordan jeg
> henter et dump af databasen "test" med brugernavn "user", password
> "pass", server "server"?

Du slipper ikke for manualen af den grund:
http://dev.mysql.com/doc/mysql/en/mysqldump.html

:)

Thomas Damgaard Niel~ (13-03-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 13-03-05 18:29

Brian Emilius wrote:
> Thomas Damgaard Nielsen skrev:
>
>> Svar på det og meget andet får du ved at skrive:
>> $ mysql --help
>>
>> Den første linie efter copyright-notitsen siger:
>> Usage: mysql [OPTIONS] [database]
>>
>> Mere info får du ved:
>> $ man mysql
>> eller
>> $ info mysql
>
>
> Men nu "sidder" jeg ikke på serveren, så kan du ikke skrive, hvordan jeg
> henter et dump af databasen "test" med brugernavn "user", password
> "pass", server "server"?

Nej, du sidder vel på en stol :)
Du kan hente MySQL fra http://www.mysql.com.
Så kan du bare køre dens command line client fra din lokale maskine.
Alternativt kan du, efter som du kan afvikle php på serveren, lave et
php-script som kører "mysql --help" ved hjælp af php.

--
Thomas Damgaard Nielsen - http://thomasdamgaard.dk
"Det er i hvert fald i størrelsesordenen 1000 eller flere om året der
dør i Danmark af partikler." -- Steffen Loft, professor, Københavns
Universitet

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste