sql >> データベース >  >> RDS >> Mysql

PHPの共有ホストでmysqlデータベースを作成してインポートします

    KISSの原則 :phpMyAdminを使用しますか?ほぼ確実にインストールされています。そうでない場合は、インストール します。 。

    そのインポート機能は素晴らしいです。データベースが万が一大きすぎる場合は、gzipで圧縮してください。それでも大きい場合は、いくつかに分割してみてください。単一の大きなトランザクションとして転送する必要があるとは思えません。しますか?

    最初のコメントでの説明の後、まあ、ここに行きます。これは私の非常に単純なスクリプトで、あなたが望むことを実行します。区切り文字を確認しない場合を除いて、1つのクエリ==1行です。

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

    また、各クエリにかかった時間の小さな統計を出力します。これはPDOに基づいています。 PDOはPHP5.1またはPHP5.2で導入されたと思います。 mysql_*()で直接機能するように変更するのは簡単なことだと思います 何らかの理由でそれを好む場合は、関数。

    そしてもう一度:はい、私はそれがひどいことを知っています。しかし、それが私(tm)、そしておそらくあなたのために働く限り... :-)

    コードを完成させるために、ここにinclude/db.phpがあります およびサンプルの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
    
    ?>
    

    SQLite、MySQL、PostgreSQLのサンプル接続文字列が含まれています。



    1. 大学院レベルのエラー処理

    2. Javaを使用したINSERTステートメントへのOracleテーブルデータ

    3. 'ORA-00942:テーブルまたはビューが存在しません'ストアドプロシージャ内で実行している場合のみ

    4. Postgresql COPY TO STDIN with CSVは、競合時にどのように更新しますか?