sql >> Databáze >  >> RDS >> Mysql

Vytvořte a importujte databázi mysql na sdíleném hostiteli v php

Princip KISS :stačí použít phpMyAdmin? Je téměř jistě nainstalován. Pokud tomu tak není, nainstalujte jej .

Jeho importní schopnost je úžasná. Pokud je vaše databáze náhodou příliš velká, zazipujte ji. Pokud je stále příliš velký, zkuste ho rozdělit na několik kusů. Pochybuji, že to musíte převést jako jednu velkou transakci. Vy?

Po vysvětlení v prvním komentáři, no, jde to. Toto je můj velmi zjednodušený skript, který dělá, co chcete. Až na to, že se nedívá na oddělovače:jeden dotaz ==jeden řádek.

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

Výstupem je také malá statistika o tom, jak dlouho každý dotaz trval. Je založen na PDO; Věřím, že PDO bylo zavedeno v PHP5.1 nebo PHP5.2. Myslím, že by mělo být triviální upravit jej tak, aby fungoval přímo s mysql_*() funkce, pokud to z nějakého důvodu preferujete.

A ještě jednou:ano, vím, že je to na hovno. Ale pokud to funguje pro mě (tm), a možná i pro vás... :-)

Pro dokončení kódu zde jsou include/db.php a ukázkový 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

?>

Zahrnuty jsou vzorové připojovací řetězce pro SQLite, MySQL a PostgreSQL.



  1. PostgreSQL:Odstraňte pár klíč/hodnota z pole s objekty json

  2. Vysvětlení SQL Server Příkaz ALTER TABLE ADD COLUMN

  3. 5 užitečných dotazů MySql během vývoje projektu

  4. Ukládání databázových záznamů do pole