Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: load danych do bazy
Forum PHP.pl > Forum > PHP
brachu
Mam pytanie odnosnie takiego skryptu, ktory chcialem napisac do wrzucenia danych do bazy z pliku. Skrypt wyglada tak:

  1. <?php
  2. ini_set('max_execution_time', 6000);
  3.  
  4. include_once('data_konf.php');
  5.  
  6. if($_POST['wykonaj']){
  7.  
  8.     $polaczenie=@mysql_connect($host_name,$user_name,$password) or die ('Nie połączony'); //Polaczenie z serwerem MySQL
  9.     
  10.     @mysql_select_db($database_name) or die ('Brak bazy danych'); //Wybranie bazy danych
  11.     
  12.     $path=$_POST['path'];
  13.     
  14.     $path=trim($path);
  15.     
  16.     if(!empty($path)&&is_dir($path)){
  17.         
  18.         $path.='/';
  19.     
  20.         $pom=mysql_query('show tables'); //Pobranie nazw wszystkich tabel z bazy
  21.         
  22.         while($table=mysql_fetch_array($pom)){
  23.             
  24.             if((!empty($_POST['tabela'])&&$table[0]==$_POST['tabela'])||empty($_POST['tabela'])){
  25.             
  26.                 if(is_file($path.$table[0].".txt")){
  27.                     
  28.                     mysql_query('lock table '.$table[0]); //Zablokowanie tabeli
  29.                     
  30.                     $pom1=mysql_query('select * from '.$table[0]);
  31.                     
  32.                     if($pom1=mysql_fetch_array($pom1)){
  33.                         
  34.                         mysql_query('truncate '.$table[0]); //Wyczyszczenie tabeli
  35.                         
  36.                     }
  37.                     
  38.                     $tablica=file($path.$table[0].".txt");
  39.                     
  40.                     foreach ($tablica as $linia){
  41.                         
  42.                         $komorka=explode("t", $linia);
  43.                                                 
  44.                         $insert='insert into '.$table[0].' values(';
  45.                         
  46.                         $licznik=sizeof($komorka);
  47.                         
  48.                         for($i=0; $i<$licznik; $i++){
  49.                             
  50.                             $komorka[$i]=trim($komorka[$i]);
  51.                             
  52.                             $komorka[$i]=addslashes($komorka[$i]);
  53.                             
  54.                             if($i==0){
  55.                                 
  56.                                 $insert.="'$komorka[$i]'";
  57.                                 
  58.                             }
  59.                             else{
  60.                                 
  61.                                 $insert.=",'$komorka[$i]'";
  62.                                 
  63.                             }
  64.                         }
  65.                         
  66.                         $insert.=')';
  67.                         
  68.                         mysql_query($insert); //Zapis pojedynczego wiersza do tabeli
  69.                         
  70.                     }
  71.                     
  72.                     mysql_query('unlock table '.$table[0]); //Odblokowanie tabeli
  73.                 
  74.                     //mysql_query("load data local infile '".$path.$table[0].".txt' into table ".$table[0]); //Zrzut danych z pliku do tabeli
  75.                     
  76.                     echo 'Tabela: '.$table[0].' - dane zaimportowane<br>';
  77.                 
  78.                 }
  79.                 else{
  80.                     
  81.                     echo '<strong>Plik: '.$path.$table[0].".txt".' nie istnieje!!!</strong><br>';
  82.                     
  83.                 }
  84.             }
  85.         }
  86.     }
  87.     else{
  88.         
  89.         echo '<center>Taki katalog nie istnieje!!!</center>
  90.             <a href="load_data.php">Spróbuj ponownie</a></center>';
  91.         
  92.     }
  93. }
  94. else{
  95.     ?>
  96.     <form action="load_data.php" method="post">
  97.     <center><strong>Podaj nazwe katalogu:</strong>
  98.     <input type="text" name="path"><br>
  99.     <strong>Podaj nazwe tabeli:</strong>
  100.     <input type="text" name="tabela"><br>
  101.     <input type="submit" name="wykonaj" value="Wykonaj load">
  102.     </center>
  103.     </form>
  104.     <?php
  105. }


A Pytanie jest takie: dlaczego skrypt nie wyrzucajac zadnego bledu (po dlugiej chwili pracy) przechodzi do strony "nie mozna znalezc strony" jest tam linijka w komentarzu z load data infile - i load dziala poprawnie a ten skrypt z insertem sie wywala.

I jeszcze takie pytanie bardziej z SQL-a: potrzebowalem przerobic ten skrypt na insert dlatego, ze load data infile nie wpisywal mi poprawnie do bazy pol z autoincrement tzn. jezeli bylo pole z autoincrement ale zdazylo sie ze np. wartosci w tym polu nie zaczynaly sie od 1 to load wpisywal dane ale to pole bylo wypelniane przez autoincrement a nie przez dane pobrane z pliku - pytanie czy da sie to jakos obejsc, zeby podstawial dane z pliku?questionmark.gif

Pozdro
bigZbig
Nie wywala błędów bo znak @ poprzedzający nazwy funkcji ma właśnie rolę blokować ewentualne komunikaty o błędach.

Jeśli pole jest auto_increment to wartości są generowane na podstawie wewnetrznego licznika w MySQLu. Jeśli chcesz mieć pole wypełniane ręcznie to opracuj swój sposób tworzenia kolejnych niepowtarzalnych wartości klucza podstawowego.
brachu
Nie nie nie na tym rzecz polega, ze jest @ bo bez nich jest to samo!!!

Wydaje mi sie, ze to jest kwestia max rozmiaru zmiennych w php ale nie jestem pewien sad.gif
DzikiLis
Masz pewność że skrypt dochodzi do końca? Może po przerobieniu każdej tabelki wyślij sobie maila z potwierdzeniem? Na moje oko ISP automatycznie zabija ci ten proces po kilku minutach. I żadne czary z max_execution_time tutaj nie pomogą.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.