Programowanie w języku PHP

Wczytywanie pliku *.sql do bazy danych

  • 2006-03-07 13:50
  • 3 komentarze
  • 1852 odsłony
  • Oceń ten tekst jako pierwszy
Popularnym sposobem na tworzenie "zrzutów" baz danych, jest zapisywanie poleceń języka SQL w postaci pliku *.sql (takią opcję umożliwia m.in. PHPMyAdmin). W tym artykule zaprezentujemy w jaki sposób odczytać zawartość takiego pliku (należy wysłać go na serwer), a następnie wysłać odpowiednie polecenia do bazy danych.

Formularz HTML będzie wyglądał następująco:

<form action="sql_read.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="sqlfile"> 
<br><hr>Dane bazy danych:<br>
Host bazy danych:  <input type="text" name="host"><br>
Login bazy danych: <input type="text" name="login"><br>
Hasło bazy danych: <input type="password" name="passwd"><br>
Nazwa bazy danych: <input type="text" name="bazaname"><br>
<input type="submit" name="send" value="Wyślij plik"> 
</form> 


Teraz podstawowe uploadowanie. Będziemy zapisywać plik w katalogu tmp. Utwórz go w tym samym katalogu, co skrypt. Fragment kodu odpowiedzialny za wysłanie pliku:

$sqlfile = $HTTP_POST_FILES['sqlfile']; //uchwyt pobranego pliku przekazujem do krótszej zmiennej 
if(isset($send)) { //wysłano dane formularzem
 
if(is_uploaded_file($sqlfile['tmp_name'])) { //jeśli plik jest gdzieś na serwerze 
 
if(move_uploaded_file($userfile['tmp_name'],'tmp/sql.sql')) 
echo '<p>Plik został zapisany na serwerze</p>'; 
} 
} 


Teraz odczytamy ten plik, podzielimy go na pojedyncze zapytania i je wykonamy:

if (file_exists('tmp/sql.sql'))
      {
          $sql = file('tmp/sql.sql'); // wczytaj plik do tablicy (jedna linia = jeden element tablicy)
          for ($i=0; $i<count($sql_file); $i++)
          {
              if ($sql[$i][0] != "#")//linia nie jest komentarzem
              {
                  $sql_cmd .= $sql[$i];
              }
          }
          //znakiem ';' okreslającym koniec polecenia SQL rozdzielamy wszystkie zapytania
          $sql_cmd = split(';', $sql_cmd);
          $j = 1; // ilosc zapytan
          //lączymy się z bazą
          mysql_connect($host,$login,$passwd);
          mysql_select_db($bazaname);
          for ($i=0; $i<count($sql_cmd) -1; $i++)
          {
              if (!mysql_query($sql_cmd[$i]))
              {
                  echo 'Zapytanie nr <b>' . $j . '</b>: błąd. MySQL zwraca:' . mysql_error() . '...<br>';
                  $iserror=true;
              }
              ++$j;
          }
if ($iserror) echo "BŁĄD WPROWADZANIA DANYCH DO MYSQL - URUCHOM INSTALACJĘ PONOWNIE";
if (!$iserror) echo '<h3>Operacja instalowania tabel w bazie danych zakończona sukcesem!</H3>';
} else print "<h3>Bł?d  - brak pliku ze zrzutem bazy danych!!! (sql.sql)</H3>";


I to jest cały kod naszego programiku - wystarczy utworzyć plik sql_read.php (+katalog tmp):

<?php
 
// SQL FILE READER v .1.0
// *** WRITTEN by Vegat
// www.vxcprogramming.prv.pl
 
$sqlfile = $HTTP_POST_FILES['sqlfile']; //uchwyt pobranego pliku przekazujem do krótszej zmiennej
if(isset($send)) { //wysłano dane formularzem
 
if(is_uploaded_file($sqlfile['tmp_name'])) { //jeśli plik jest gdzieś na serwerze
 
if(move_uploaded_file($sqlfile['tmp_name'],'tmp/sql.sql'))
echo 'Plik został zapisany na serwerze';
} else echo(' Błąd uploadu');
 
if (file_exists('tmp/sql.sql'))
      {
          $sql = file('tmp/sql.sql'); // wczytaj plik do tablicy (jedna linia = jeden element tablicy)
          for ($i=0; $i<count($sql_file); $i++)
          {
              if ($sql[$i][0] != "#")//linia nie jest komentarzem
              {
                  $sql_cmd .= $sql[$i];
              }
          }
          //znakiem ';' okreslającym koniec polecenia SQL rozdzielamy wszystkie zapytania
          $sql_cmd = split(';', $sql_cmd);
          $j = 1; // ilosc zapytan
          //lączymy się z bazą
          mysql_connect($host,$login,$passwd);
          mysql_select_db($bazaname);
          for ($i=0; $i<count($sql_cmd) -1; $i++)
          {
              if (!mysql_query($sql_cmd[$i]))
              {
                  echo 'Zapytanie nr <b>' . $j . '</b>: błąd. MySQL zwraca:' . mysql_error() . '...<br>';
                  $iserror=true;
              }
              ++$j;
          }
if ($iserror) echo "BŁĄD WPROWADZANIA DANYCH DO MYSQL - URUCHOM INSTALACJĘ PONOWNIE";
if (!$iserror) echo '<h3>Operacja instalowania tabel w bazie danych zakończona sukcesem!</H3>';
} else print "<h3>Bł?d  - brak pliku ze zrzutem bazy danych!!! (sql.sql)</H3>";
}
?>
 
<form action="sql_read.php" method="post" enctype="multipart/form-data">
<input type="file" name="sqlfile">
<br><hr>Dane bazy danych:<br>
Host bazy danych:  <input type="text" name="host"><br>
Login bazy danych: <input type="text" name="login"><br>
Hasło bazy danych: <input type="password" name="passwd"><br>
Nazwa bazy danych: <input type="text" name="bazaname"><br>
<input type="submit" name="send" value="Wyślij plik">
</form>

3 komentarze

Brak avatara
Trool 2013-10-27 00:06

Bardzo dobry artykuł! Godny polecenia ;)

Ktos 2004-12-28 21:00

dlaczego część jest pokolorowana a część nie?

vegat 2004-12-29 11:17

nie wiem. Zawsze wstawiałem &lt;php&gt; i &lt;/php&gt; może chodzi o znacznik <? ??