Avatar billede carlo1 Nybegynder
02. september 2005 - 09:55 Der er 14 kommentarer og
1 løsning

MySQL dump til csv fil

Jeg har søgt men ikke fundet. Jeg vil gerne på en side have mulighed for at tage en backup af nogle data fra en enkelt tabel og så gemme dem til en csv fil, (så det kan indsættes i excel uden at det ligner lort.)

Jeg vil ikke bruge phpmyadmin, da det ikke er mig der skal tage backup men en potentiel uerfaren bruger, og vedkommende kan hurtigt komme til at lave rav i den. Jeg har prøvet at kigge i koden til phpmyadmin, for de rigtige elementer ligger deri, men jeg har overhovedet ikke overblik over alt det kode.  Jeg skal kun kunne tage backup og intet andet.

Er der en der kan greje den?
Avatar billede nielle Nybegynder
02. september 2005 - 10:08 #1
Det ville være rimeligt let at lave et PHP-script som løser opgaven.
Avatar billede nielle Nybegynder
02. september 2005 - 10:26 #2
F.eks. sådan:

<?php
$conn = mysql_connect("dinServer", "dinUser", "ditPassword") or die(mysql_error());
mysql_select_db("dinDatabase")) or die(mysql_error());

$sql = "SELECT * FROM dinTabel ORDER BY ditID ASC";
$result = mysql_query($sql) or die(mysql_error());

$handle = fopen("dinFil.csv", "w");

while ($row = mysql_fetch_assoc($result))
{
    $line = $row["ditFelt1"];
    $line .= "," . $row["ditFelt2"];
    $line .= "," . $row["ditFelt3"];
    $line .= "," . $row["ditFelt4"];   

    fwrite($handle, $line);
}

fclose($handle);

mysql_free_result($result);
?>
Avatar billede carlo1 Nybegynder
02. september 2005 - 11:09 #3
Er du sikker på det virker? For her gør det ikke, den skriver ingenting.
Avatar billede nielle Nybegynder
02. september 2005 - 11:21 #4
Det burde virke (men du skal selvfølgelig tilpasse de forskellige navne til det der gælder for dit tilfælde). Desuden er det vigtigt at der er skrive tilladelse der hvor csv-filen skal gemmes.
Avatar billede carlo1 Nybegynder
02. september 2005 - 11:32 #5
Jo det har jeg også gjort og mappe tilladelserne er også i orden.
Avatar billede nielle Nybegynder
02. september 2005 - 11:35 #6
Hvis det ikke virker så burde du blive præsenteret for en eller anden fejlbesked.
Avatar billede carlo1 Nybegynder
02. september 2005 - 11:40 #7
Jeg får bare n blank skærm, ligesom vist man f.eks. sætter et { for meget e.lign.
Men jeg kan ikke få øje på nogle forkerte tegn nogen steder
Avatar billede carlo1 Nybegynder
02. september 2005 - 11:49 #8
hov der var vist en afslut parantes for meget ved  mysql_select_db("dinDatabase"))
så vidt jeg kan se, men stadig ingen succes
Avatar billede nielle Nybegynder
02. september 2005 - 14:52 #9
Nu bliver der jo faktisk heller ikke skrevet noget ud til skærmen - det bliver alt sammen skrevet til filen på disken. Men hvis den heller ikke bliver lavet, så er der bestemt noget galt.

Prøv med noget debug-udskrift:

<?php
$conn = mysql_connect("dinServer", "dinUser", "ditPassword") or die(mysql_error());
mysql_select_db("dinDatabase") or die(mysql_error());

$sql = "SELECT * FROM dinTabel ORDER BY ditID ASC";
$result = mysql_query($sql) or die(mysql_error());

$handle = fopen("dinFil.csv", "w");

while ($row = mysql_fetch_assoc($result))
{
    $line = $row["ditFelt1"];
    $line .= "," . $row["ditFelt2"];
    $line .= "," . $row["ditFelt3"];
    $line .= "," . $row["ditFelt4"];
    $line .= "\n";

    echo "DEBUG: " . $line . "<br>";

    fwrite($handle, $line);
}

fclose($handle);

mysql_free_result($result);
?>
Avatar billede carlo1 Nybegynder
02. september 2005 - 15:13 #10
Så virker det sgu nielle! Jeg ved ikke hvad der var galt før...? Dog skulle jeg lige bytte kommaer ud med ; i $line.=..... for at det står ordentligt i kolonnerne.

Smid et svar
Avatar billede nielle Nybegynder
02. september 2005 - 15:23 #11
Svar :^)
Avatar billede carlo1 Nybegynder
15. september 2005 - 09:39 #12
Hej igen Nielle

Er der en måde hvorpå jeg kan få den til at spørge om jeg vil åbne filen eller gemme på harddisken?
Avatar billede nielle Nybegynder
15. september 2005 - 17:33 #13
Hvis du starter med at udskrive følgende headers:

Content-type: application/msexcel
Content-disposition: inline; filename="test.csv"
Pragma: no-cache
Expires: 0

Derefter en tom linje, og så de data som ellers skulle gemmes på harddisken, så burde der komme en dialog ud som spørger om du vil gemme filen test.csv.
Avatar billede carlo1 Nybegynder
16. september 2005 - 10:02 #14
Hvor ville du sætte det ind i ovenstående som du strikkede sammen den anden dag?

Er det den 3. sidste linie (fwrite($handle...osv) der giver outputtet?
Avatar billede nielle Nybegynder
16. september 2005 - 18:09 #15
Jeg er ikke helt sikker, men noget i denne stil:

<?php
header("Content-type: application/msexcel");
header("Content-disposition: inline; filename="dinFil.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "\n\n";

$conn = mysql_connect("dinServer", "dinUser", "ditPassword") or die(mysql_error());
mysql_select_db("dinDatabase") or die(mysql_error());

$sql = "SELECT * FROM dinTabel ORDER BY ditID ASC";
$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_assoc($result))
{
    $line = $row["ditFelt1"];
    $line .= "," . $row["ditFelt2"];
    $line .= "," . $row["ditFelt3"];
    $line .= "," . $row["ditFelt4"];
    $line .= "\n";

    echo $line . "\n";
}

mysql_free_result($result);
?>
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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