Zasada KISS :wystarczy użyć phpMyAdmin? Prawie na pewno jest zainstalowany. Jeśli tak nie jest, zainstaluj go .
Jego możliwości importowe są wspaniałe. Jeśli Twoja baza danych jest przypadkiem zbyt duża, zgzipuj ją. Jeśli nadal jest za duży, spróbuj podzielić go na kilka kawałków. Wątpię, czy musisz przenieść to jako jedną dużą transakcję. Czy ty?
Po wyjaśnieniu w pierwszym komentarzu, cóż, zaczyna się. To jest mój bardzo uproszczony skrypt, który robi to, co chcesz. Tyle że nie zwraca uwagi na separatory:jedno zapytanie ==jedna linia.
<link href="style/contents.css"/>
<?
function timesanitize($v) {
if ($v > 0)
return round($v, 4);
else
return 0;
}
$startmt = microtime();
include_once 'include/db.php';
$f = fopen("db.sql","r");
echo dbGetEngine() . "<br>";
echo "<ul>";
do {
$l = rtrim(fgets($f));
if (strlen($l) == 0)
continue;
if (substr($l, 0, 1) == '#')
continue;
$l = str_replace(
array("\\n"),
array("\n"),
$l);
if (dbGetEngine() == "pgsql")
$l = str_replace(
array("IF NOT EXISTS", "LONGBLOB"),
array("", "TEXT"),
$l);
try {
echo "<li>".nl2br(htmlspecialchars($l));
$mt = microtime();
$db->query($l);
echo "<ul><li>ok - " . timesanitize(microtime() - $mt) . "</ul>";
} catch (PDOException $e) {
echo "<ul><li>".$e->getMessage() . "</ul>";
}
} while (!feof($f));
fclose($f);
echo 'total: ' . timesanitize(microtime() - $startmt);
?>
Wyprowadza również niewielką statystykę dotyczącą czasu trwania każdego zapytania. Opiera się na PDO; Uważam, że PDO zostało wprowadzone w PHP5.1 lub PHP5.2. Myślę, że zmodyfikowanie go tak, aby działał bezpośrednio z mysql_*()
, powinno być trywialne funkcje, jeśli z jakiegoś powodu wolisz to.
I jeszcze raz:tak, wiem, że to jest do bani. Ale tak długo, jak to działa dla mnie (tm) i prawdopodobnie dla Ciebie... :-)
Aby uzupełnić kod, oto include/db.php
i przykładowy include/config.php
:
include/db.php
:
<?
include_once 'include/config.php';
try {
$attribs =
array(
PDO::ATTR_PERSISTENT => $config['db']['persistent'],
PDO::ATTR_ERRMODE => $config['db']['errormode']
);
$db = new PDO(
$config['db']['uri'],
$config['db']['user'],
$config['db']['pass'],
$attribs
);
$db->query("SET NAMES 'utf8'");
$db->query("SET CHARACTER SET 'utf8'");
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
function dbGetEngine() {
global $config;
return substr($config['db']['uri'], 0, strpos($config['db']['uri'], ':'));
}
?>
include/config.php
:
<?
//$config['db']['uri'] = 'sqlite:' . realpath('.') . '/site.db'; // PDO's database access URI
$config['db']['uri'] = 'mysql:host=localhost;dbname=sitedb'; // server should be : 195.78.32.7
//$config['db']['uri'] = 'pgsql:host=localhost;dbname=sitedb';
$config['db']['user'] = 'user_goes_here'; // database username
$config['db']['pass'] = 'pass_goes_here'; // database password
$config['db']['persistent'] = false; // should the connection be persistent
$config['db']['errormode'] = PDO::ERRMODE_EXCEPTION; // PDO's error mode
?>
Dołączone są przykładowe parametry połączenia dla SQLite, MySQL i PostgreSQL.