KISS-principe :gewoon phpMyAdmin gebruiken? Het is vrijwel zeker geïnstalleerd. Als dit niet het geval is, installeer het .
De importmogelijkheden zijn magnifiek. Als je database toevallig te groot is, gzip hem dan. Als het nog steeds te groot is, probeer het dan op te splitsen in een paar stukken. Ik betwijfel of je het als één grote transactie moet overdragen. Jij ook?
Na de uitleg in de eerste opmerking, nou, hier gaat het. Dit is mijn zeer simplistische script dat doet wat je wilt. Behalve dat er niet naar de scheidingstekens wordt gekeken:één zoekopdracht ==één regel.
<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);
?>
Het geeft ook een kleine statistiek weer van hoe lang elke query duurde. Het is gebaseerd op PDO; Ik geloof dat PDO is geïntroduceerd in PHP5.1 of PHP5.2. Ik denk dat het triviaal zou moeten zijn om het aan te passen zodat het rechtstreeks met mysql_*()
werkt functies, als u daar om de een of andere reden de voorkeur aan geeft.
En nogmaals:ja, ik weet dat het klote is. Maar zolang het voor mij werkt (tm), en mogelijk ook voor jou... :-)
Om de code te voltooien, vindt u hier include/db.php
en een voorbeeld 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
?>
Inbegrepen zijn voorbeeldverbindingsreeksen voor SQLite, MySQL en PostgreSQL.