sql >> Database >  >> RDS >> Mysql

Maak en importeer mysql-database op gedeelde host in php

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.



  1. ORA-06550:Verkeerd nummer of type argumenten fout bij het aanroepen van een functie in een orakelpakket in ASP.NET

  2. MySQL:een nieuwe tabel maken met informatie uit een query

  3. SQLite Join

  4. Prioriteer de ene kolom boven de andere