Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] tworzenie kopii bazy MySQL..
Forum PHP.pl > Forum > PHP
wilman
Witam!
Znalazłem w sieci taki kod do tworzenia kopii bazy danych:

CODE

<?php
$link = mysql_connect('127.0.0.1', 'root', 'haslo') or die('Connection error : ' . mysql_error());

mysql_select_db('nazwa bazy') or die('Could not select database');

$sql = '';
$crlf = "\r\n";

$time = date('Y m d, H:i', time());
$sql .= '#' . $crlf;
$sql .= '# Zrzut bazy danych ' . $crlf;
$sql .= '# Wygenerowano: ' . $time . $crlf;
$sql .= '#' . $crlf . $crlf;

$res = mysql_list_tables('nazwa bazy');
while($row = mysql_fetch_array($res))
{
$table_name = $row[0];
$table_fields = array();

$sql .= '#' . $crlf;
$sql .= '# Struktura tabeli ' . $table_name . $crlf;
$sql .= '#' . $crlf;

$sql .= 'DROP TABLE IF EXISTS ' . $table_name . ';' . $crlf;
$sql .= 'CREATE TABLE ' . $table_name . ' ( ' . $crlf;

/* Generujemy strukture tabeli. Najpierw wyciagamy pola */
$res2 = mysql_query('SHOW FIELDS FROM ' . $table_name);
while($fields = mysql_fetch_array($res2))
{
$sql .= ' ';
$sql .= $fields['Field'] . ' ' . $fields['Type'];
if (!empty($fields['Default']))
{
$sql .= 'DEFAULT \'' . $fields['Default'] . '\'';
}

if ($fields['Null'] != 'Yes')
{
$sql .= ' NOT NULL';
}

if (!empty($fields['Extra']))
{
$sql .= ' ' . $fields['Extra'];
}

$sql .= ',' . $crlf;

$table_fields[] = $fields['Field'];
}

$index = '';

/* Teraz wyciagamy pola typu KEY */
$res2 = mysql_query('SHOW KEYS FROM ' . $table_name);
while ($keys = mysql_fetch_assoc($res2))
{
$kname = $keys['Key_name'];
if(($kname != 'PRIMARY') && ($keys['Non_unique'] == 0))
{
$kname = 'UNIQUE|' . $kname;
}

$index[$kname] = array();
$index[$kname][] = $keys['Column_name'];
}

while(list($n, $columns) = @each($index))
{
if ($n == 'PRIMARY')
{
$sql .= ' PRIMARY KEY (' . implode($columns, ', ') . ')';
}
elseif (substr($n, 0, 6) == 'UNIQUE')
{
$sql .= ' UNIQUE ' . substr($n, 7) . ' (' . implode($columns, ', ') . ')';
}
else
{
$sql .= ' KEY ' . $n . ' (' . implode($columns, ', ') . ')';
}
$sql .= $crlf;
}

$sql .= ');' . $crlf;
$sql .= $crlf . $crlf;

$sql .= '#' . $crlf;
$sql .= '# Dane z tabeli ' . $table_name . $crlf;
$sql .= '#' . $crlf;

/* Mamy juz strukture, wiec teraz czas
wyciagnac dane z tabeli */
$d_res = mysql_query('SELECT * FROM ' . $table_name);
while ($data = mysql_fetch_array($d_res))
{
$sql .= 'INSERT INTO ' . $table_name . ' (' . implode(', ', $table_fields) . ') VALUES(';

$field_count = count($table_fields);
$f_data = array();
for ($i = 0; $i < $field_count; $i++)
{
$f_data[] .= '\'' . $data[$i] . '\'';
}
$sql .= implode(', ', $f_data);
$sql .= ');' . $crlf;
}
$sql .= $crlf . $crlf;
}


$file = fopen('test.sql', 'w');
fwrite($file, $sql);
fclose($file);

?>


Jak wyeksportowałem bazę do pliku, to nie mogę jej importować bo w treści sa różne zanaki specjalne typu ' czy " .
Moje pytanie brzmi: czy da się do tego kodu wprowadzić obsługę snaków specjalnych? Jeśli tak, to proszę o sugestie :-)
Pozdrawiam
Kocurro
Zamiast:

  1. <?php
  2. $f_data[] .= ''' . $data[$i] . ''';
  3. ?>


Daj:

  1. <?php
  2. $f_data[] .= ''' . mysql_escape_string( $data[$i]) . ''';
  3. ?>


I używaj poprawnego bbcode.

pozdr.
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.