Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen und importieren Sie eine MySQL-Datenbank auf einem gemeinsam genutzten Host in PHP

KISS-Prinzip :Verwenden Sie einfach phpMyAdmin? Es ist mit ziemlicher Sicherheit installiert. Wenn dies nicht der Fall ist, installieren Sie es .

Seine Importfähigkeit ist großartig. Wenn Ihre Datenbank zufällig zu groß ist, gzip sie. Wenn es immer noch zu groß ist, versuchen Sie es in ein paar Stücke zu teilen. Ich bezweifle, dass Sie es als eine einzige große Transaktion übertragen müssen. Sie?

Nach der Erklärung im ersten Kommentar, nun, hier geht es weiter. Dies ist mein sehr einfaches Skript, das tut, was Sie wollen. Nur dass die Trennzeichen nicht beachtet werden:eine Abfrage ==eine Zeile.

<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);
?>

Es gibt auch eine kleine Statistik darüber aus, wie lange jede Abfrage gedauert hat. Es basiert auf PDO; Ich glaube, PDO wurde in PHP5.1 oder PHP5.2 eingeführt. Ich denke, es sollte trivial sein, es so zu modifizieren, dass es direkt mit mysql_*() funktioniert Funktionen, wenn Sie das aus irgendeinem Grund bevorzugen.

Und noch einmal:Ja, ich weiß, es ist scheiße. Aber solange es für mich (tm) und möglicherweise für Sie funktioniert... :-)

Um den Code zu vervollständigen, hier sind include/db.php und ein Beispiel 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

?>

Enthalten sind Beispiel-Verbindungszeichenfolgen für SQLite, MySQL und PostgreSQL.