Miért exportálja kétszer a legelső táblát?
2022-03-25T09:40:49+01:00
2022-03-25T13:09:18+01:00
2022-08-12T08:10:30+02:00
Avril
Sziasztok!

Van egy MYSQL adatbázis exportáló függvényem, amely vagy egy teljes adatbázist, vagy csak az adott adatbázisból bizonyos táblákat exportál.

Az utóbbi esetnél, tehát az if ($tables == null) else ágánál adódott egy kis problémám.

<?php $str = ''; function export_fv($db,$tables=null){ if (isset($db)){ global $kapcsolat,$str; $db = 'proba'; require('../kapcsolat.php'); $datum = time(); if ($tables == null){ // teljes adatbázist $tablak = array(); mysqli_select_db($kapcsolat,$db); $t = mysqli_query($kapcsolat,'SHOW TABLES'); while ($row = mysqli_fetch_row($t)) $tablak[] = $row[0]; } else{ // adott táblát $eleje = 'adat'; // a táblák neveinek az eleje $tablak = array( // exportálandó táblák => $eleje + $tablak[...] '', // 'adat' '_fo', // 'adat_fo' '_opcio', // 'adat_opcio' '_egyeb' // 'adat_egyeb' ); echo '<pre>';print_r($tablak);echo '</pre>'; for ($i=0; $i<count($tablak); $i++){ $t_nev = $eleje.$tablak[$i]; echo "$db => $eleje.$tablak[$i]<hr>"; mysqli_select_db($kapcsolat,$db); $t = '`'.$eleje.$tablak[$i].'`'; $mezo = mysqli_query($kapcsolat,'SELECT * FROM '.$t); $mezo_num = mysqli_num_fields($mezo); $row2 = mysqli_fetch_row(mysqli_query($kapcsolat,'SHOW CREATE TABLE '.$t)); $str .= $row2[1].";\n\n"; for ($i2 = 0; $i2<$mezo_num; $i2++){ while($row = mysqli_fetch_row($mezo)){ $str .= 'INSERT INTO '.$t.' VALUES('; for($j=0; $j<$mezo_num; $j++){ $row[$j] = addslashes($row[$j]); $row[$j] = str_replace("\n","\n",$row[$j]); if (isset($row[$j])) $str .= '"'.$row[$j].'"'; else $str .= '""'; if ($j < ($mezo_num-1)) $str .= ','; } $str .= ");\n"; } } $uj_t = array($str); echo 'uj_t:<pre>';print_r($uj_t);echo '</pre>'; if ($i < count($uj_t)) $str .= $uj_t[$i]; } $str .= "\n-- vége\n\n"; $m = 'SQL/'.$datum.'_'.$db.'_'.$t_nev; $f = $m.'.sql'; $n = 0; if (!file_exists('SQL')) mkdir('SQL',0777); while (file_exists($f)) $f = 'SQL/'.$db.'_'.$t_nev.'('.(++$n).').sql'; $d = explode('/',$f); $d = explode('_',$d[1]); echo 'A(z) <b>'.$f.'</b> létrehozva! - '.date('Y.m.d. H:i:s',$d[0]).'<br>'; $handle = fopen($f,'w'); fwrite($handle,$str); fclose($handle); } } } ?>

Szóval, a függvény első else ágától van a gondom.
Az egyszerűség kedvéért az exportálandó táblákat most nem a függvény $tables paraméteréből nyerem ki, hanem fixen, beraktam a $tablak tömbbe.

A baj az exportálandó tartalomba kétszer kerül bele a $tablak() tömb első eleme szerinti 'adat' tábla, aztán szép sorban következik a többi, azokat már nem duplikálja a végeredményben.

A kérdésem az, hogy miért veszi kétszer a legelső táblát?
Mit módosítsak a függvényben, hogy ez a hiba megszűnjön, hogy minden táblát csak egyszer mentsen az exportba?

Köszönöm szépen!
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd