07. juni 2006 - 23:04
Der er
39 kommentarer og 1 løsning
Kør flere lange querys på en gang.
Je har en sql-fil indeholdende mange querys, tilsvarende filen der kan eksporteres fra phpMyAdmin. Hvordan kan jeg køre alle dem på en gang? Alle querys er overført til en variabel, som jeg nu gerne vil bearbejde. Har fosøgt med: //Upload filen til tmp folderen //Her skal filen flyttes fra $tmpfil = $_FILES['fil']['tmp_name']; //Hvilken type fil arbejder vi med? $ext = strtolower(end(explode(".", $_FILES['fil']['name']))); if ($ext == "sql"){ if ($txt) { $fp = fopen($tmpfil,w); fputs($fp,$txt); fclose($fp); } $fp = fopen($tmpfil,r); $txt = fread($fp,filesize($tmpfil)); fclose($fp); } //Kør query $p_query = $txt; $query_split = preg_split ("/;/", $p_query); foreach ($query_split as $command_line) { $command_line = trim($command_line); if ($command_line != '') { $query_result = mysql_query($command_line); if ($query_result == 0) { break; }; }; }; echo $query_result; Desværre virker dette ikke helt efter planen. For det første er det uhensigtsmæssigt bare at dele ved ; da der kan være et semikolon andre steder i filen. Samtidig kører scriptet kun en del af queryerne. Havde omkring 20 tabeller der skulle oprettes, men kun den første blev det. Nogen der har et forslag? Vil gerne have en god og stabil løsning tilsvarende phpMyAdmin's.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Har du prøvet at kører det hele på en gang?
Ja, som mysql_query($txt); Men tror ikke kommandoen mysql_query kan håndtere mere end een ad gangen. -> Det virkede i hvert fald ikke.
Prøv: <?php $host = "host"; $user = "user" $pass = "pass"; $filename = "file.sql" echo "<br>".$filename; $file = fopen($filename, 'r'); $data = array(); $i = 0; while ($line = fgets($file)) { if (ereg('^--', $line)) { if ($data[$i] != '') { $i++; $data[$i] = ''; } } else { $data[$i] .= $line; } } echo "*********************<br>"; print_r($data); echo "*********************<br>"; $conn = mysql_connect($host, $user, $pass); mysql_select_db($db, $conn); $i = 0; while (isset($data[$i])) { $data[$i] = explode(';', $data[$i]); $j = 0; while (isset($data[$i][$j])) { if (!empty(trim($data[$i][$j]))) { echo "++ Running *************<br>".$data[$i][$j]."<br>++ *******************<br>"; mysql_query($data[$i][$j]); echo "<br><br>".mysql_error()."<br><br><br>"; } else { echo "++ Skipping empty query\n"; } $j++; } $i++; } ?> Det er den jeg bruger...
Jeg kan ikke får den til at virke. Den er nu oppe på de første 5 tabeller, men ikke mere. Så denne løsning er desværre heller ikke helt optimal - Eller også er det bare mig...
Tja, har arbejdet lidt på det, og nået frem til at et direkte eksport fra PHP myadmin virker fint sammen med dit script. Så problemet må jo ligge i min export. -> sjovt nok virker min almindelige export fil fint sammen med php-myadmin.
Kan se mit exportscript har flere alternativer i forhold til den almindelige export fra phpmyadmin. Nogen der har et godt script til denne export?
mysql dump... det er det phpMyAdmin bruger..
Er der bare en samlet komando til det? Det var jeg slet ikke klar over. Det vil jeg lige prøve.
08. juni 2006 - 16:19
#10
system("mysqldump --opt -h $host -u $bruger -p $kodeord $database | gzip > ".$database . date("Y-m-d-H-i-s") . '.gz'); Det er dump... Men der er også: SELECT * INTO OUTFILE 'filnavn.sql' FROM tabelnavn Den kan også gå den anden vej hvis det hjælper dig: LOAD DATA INFILE 'filnavn.sql' INTO TABLE tabelnavn
08. juni 2006 - 16:49
#11
Hvordan får jeg filen gemt på clienten i stedet for i en fil et eller andet sted på serveren? - Vil helt undgå skriveadgang til mappen...
08. juni 2006 - 16:51
#12
hvis bare dumpet kunne placeres i en variabel istedet ville det være fint.
08. juni 2006 - 16:51
#13
Angiver sti til hvor du vil have den, ville være et godt sted...
08. juni 2006 - 16:53
#14
Ja, men der kan du jo ikke arbejde på clienten.
08. juni 2006 - 17:08
#15
Øhhh, kan du ikke angive en sti siger du????
08. juni 2006 - 17:09
#16
Jo, men ikke en sti på clienten. Jeg har en scriptet liggende på min server, og ønsker i sidste ende .sql filen placeret op min egen computer.
08. juni 2006 - 17:16
#17
Så vil det andet heller ikke virker hvis din PHP og din SQL ikke ligger på samme maskine...
08. juni 2006 - 17:18
#18
Jeg har en server, med php og mysql og alt det der nu hører til. Nu ønsker jeg at tage en backup af databasen og gemme den på min egen computer, og ikke bare et andet sted på serveren. Da php er et server-script sprog, er det ikke muligt at gemme direkte på clienten, og jeg skal derfor bare have det udlæst på skærmen eller i en variabel.
08. juni 2006 - 17:24
#19
$output = system("mysqldump --opt -h $host -u $bruger -p $kodeord $database"); Men husk PHP kan ikke lave uendelige store variabler...
08. juni 2006 - 17:30
#20
hm. output variabel forbliver desværre tom.
08. juni 2006 - 17:34
#21
Prøv med exec og så husk det kommer ud som et array.
08. juni 2006 - 17:46
#22
Som: $output = exec(system("mysqldump --opt -h $host -u $bruger -p $kodeord $database")); print_r($output); ik?
08. juni 2006 - 17:47
#23
F.eks...
08. juni 2006 - 17:48
#24
Warning: exec(): Cannot execute a blank command in E:\WEB\test\index.php on line 8
08. juni 2006 - 17:49
#25
Sorry... det er selvfølgelig exec istedet for system... troede det gav sig selv.
08. juni 2006 - 17:52
#26
Tja, det gør det nok også. Desværre forbliver variablen tom.
08. juni 2006 - 17:55
#27
Noget siger mig at den bare giver fejl, fordi du ikke har mysqldump i din path... Skriv fuld sti til mysqldump...
08. juni 2006 - 17:56
#28
Lost...
08. juni 2006 - 17:59
#29
$output = system("/usr/bin/mysqldump --opt -h $host -u $bruger -p $kodeord $database"); Hvis mysqldump ligger i /usr/bin/.
08. juni 2006 - 18:02
#30
Skriv filen på serveren med OUTFILE og INFILE, som iss foreslår. Henvis derefter til den med header() og content-type: application/octet-stream. Så kan du vælge hvor den skal gemmes.. Med mindre det er en automatisk backup?
08. juni 2006 - 18:03
#31
Jeg får da lært en hel del i dag, og ja min mysqldump ligger i den mappe, men variablen er desværre stadig tom.
08. juni 2006 - 18:04
#32
Det er ikke en automatisk backup, og bruger normalt header() til download. Syntes bare ikke jeg kan få det til at virke med outfile, men vil da gøre endnu et forsøg.
08. juni 2006 - 18:05
#33
Outfile kan da forresten kun medtage en tabel. Har en hel del af slagsen.
08. juni 2006 - 18:06
#34
/usr/bin/mysqldump findes vel næppe på en Windows?
08. juni 2006 - 18:07
#35
Det hele ligger på en linux server. -> som jeg hellere må nævne at jeg ikke selv administrerer 100%
08. juni 2006 - 18:07
#36
SHOW TABLES loop over alle tabeller SELECT * INTO OUTFILE '$table.sql' FROM $table
08. juni 2006 - 18:30
#37
Så kom der hul igennem. Ligger i begge et svar?
08. juni 2006 - 18:41
#38
Nææææ
08. juni 2006 - 18:47
#39
Du skal i hvert fald have mange tak for hjælpen. Du har jo næsten brugt hele dagen på det.
24. august 2006 - 10:08
#40
Lukker
Vi tilbyder markedets bedste kurser inden for webudvikling