mozliwe jest też, że na poprzednim serwerze jest inna wersja bazy danych np starsza niż 4.1+ i wtedy mozna to rozwiazac w taki oto sposób:
Kod PHP:
<?php
/**
* Funkcja wczytuje plik sql do bazy danych
*
* @author FanFataL
* @param string Nazwa pliku z zrzutem bazy danych
* @param resource Uchwyt do połączenia z bazą danych
* @param [string] Kodowanie - tylko dla MySQL wersji 4.1 i wyższej (np. latin2)
* @return mixed
*/
function mysqlPutFile($url, $conn_id, $charset='latin2') {
// Sprawdzeine czy plik istnieje
if (!file_exists($url)) die('Brak pliku');
// Sprawdzenie czy wersja bazy danych jest 4.1+ (thx to omeck)
$set_charset = false;
if (function_exists('mysql_get_client_info')) {
if (preg_match('/^(\d+\.\d+)/', mysql_get_server_info($conn_id), $matched)) {
$v = (float)$matched[1];
if ($v>=4.1)
$set_charset = true;
}
}
if ($set_charset && $charset) {
// Ustawienie kodowania dla połączenia
$query = 'SET NAMES '.$charset;
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
// Ustawienie kodowania i systemu porównań dla bazy danych
$query = 'SELECT DATABASE()';
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
$row = mysql_fetch_row($result);
$query = 'ALTER DATABASE `'.$row[0].'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
// Ustawienie kodowania i systemu porównań dla istniejących tabel
$query = 'SHOW TABLES';
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
while ($row = mysql_fetch_row($result)) {
$query = 'ALTER TABLE `'.$row[0].'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
}
}
// Wczytanie pliku
if(!$file = @fopen($url, 'r')) die('Nie udało się odczytać pliku');
$query = '';
$is_create = false;
while (!feof($file)) {
$line = fgets($file);
$tmp = trim($line);
// Pominięcie komentarzy
if ($tmp!='' && substr($tmp, 0, 2)!='--' && substr($tmp, 0, 1)!='#') {
// Sprawdzenie czy nie jest tworzona tabela
if ($set_charset && $charset && !$is_create && preg_match('/^CREATE\s+TABLE\s+(IF\s+NOT\s+EXISTS\s+)?(`)?([\w\d\_]+)(\\2)?/im', trim($query), $matched)) {
$is_create = $matched[3]; // nazwa tabeli
}
// Sprawdzenie czy koniec zapytania
$end_pattern = '/;\s*((\#|(\-\-)).*?)?$/';
if (preg_match($end_pattern, $line)) {
$line = preg_replace($end_pattern, '', $line);
$query .= $line;
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
if($is_create) { // Jak jest tworzona to zmieniamy kodowanie i system porównań
$query = 'ALTER TABLE `'.$is_create.'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
$is_create = false;
}
$query = '';
}
else {
$query .= $line;
}
}
}
fclose($file);
}
// Przykład użycia
$con = mysql_connect('localhost','user','*******');
mysql_select_db('test');
mysqlPutFile('./kaalog/plik.sql', $con, 'latin2');
?>