簡體   English   中英

使用 pdo 連接到兩個數據庫的最佳方式

[英]Best way for connecting to two databases using pdo

我想連接到兩個數據庫。
第一個是舊數據庫。
第二個是新數據庫。

我必須將數據從舊數據庫傳輸到新數據庫,首先我想知道如何使用 PDO 在 php 中建立正確編寫的數據庫連接

下面的代碼是我到目前為止所得到的

error_reporting(E_ALL);

$olddb = array (
    'host' => 'localhost',
    'dbname' => 'old',
    'user' => 'root',
    'pass' => ''
);

try
{
    $olddb = new PDO('mysql:host='.$olddb['host'].';dbname='.$olddb['dbname'], $olddb['user'], $olddb['pass']);
    $olddb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $olddb->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e)
{
    $errormessage = '<p> 
            Regelnummer: '.$e->getLine().'<br /> 
            Bestand: '.$e->getFile().'<br /> 
            Foutmelding: '.$e->getMessage().' 
        </p>';

    trigger_error($errormessage);
}

$newdb = array (
    'host' => 'localhost',
    'dbname' => 'new',
    'user' => 'root',
    'pass' => ''
);

try
{
    $newdb = new PDO('mysql:host='.$newdb['host'].';dbname='.$newdb['dbname'], $newdb['user'], $newdb['pass']);
    $newdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $newdb->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e)
{
    $errormessage = '<p> 
            Regelnummer: '.$e->getLine().'<br /> 
            Bestand: '.$e->getFile().'<br /> 
            Foutmelding: '.$e->getMessage().' 
        </p>';

    trigger_error($errormessage);
}

如果兩個數據庫在同一台服務器上,則不需要建立兩個 PDO 連接。 PDO DSN 中指定的數據庫只是默認值,但您可以使用表名前的前綴訪問其他數據庫。 如果兩個表的架構相同,則可以使用:

INSERT INTO newdb. gebruikers
SELECT * FROM olddb. gebruikers

我認為將數據庫從舊數據庫傳輸到新數據庫的代碼如下所示:

try 
{ 
    $query = " 
    SELECT * FROM gebruikers "; 

    $olddb_users = $olddb->prepare($query); 
    $olddb_users->execute(); 

    while($olddb_user = $olddb_users->fetch(PDO::FETCH_ASSOC))
    {  


    $query = "
     INSERT INTO gebruikers (id, gebruikersnaam, wachtwoord, naam, adres, plaats) 
        VALUES (:id, :gebruikersnaam, :wachtwoord, :naam, :adres, :plaats) 
        ";

    $newdb_user = $newdb->prepare($query); 

    $newdb_user->bindParam(':id', $olddb_user['id'], PDO::PARAM_STR); 
    $newdb_user->bindParam(':gebruikersnaam', $olddb_user['gebruikersnaam'], PDO::PARAM_STR); 
    $newdb_user->bindParam(':wachtwoord', $olddb_user['wachtwoord'], PDO::PARAM_STR); 
    $newdb_user->bindParam(':naam', $olddb_user['naam'], PDO::PARAM_STR); 
    $newdb_user->bindParam(':adres', $olddb_user['adres'], PDO::PARAM_STR); 
    $newdb_user->bindParam(':plaats', $olddb_user['plaats'], PDO::PARAM_STR); 

    $newdb_user->execute(); 

    $newdb_user_id = $newdb->lastInsertId();


    } 
}

catch(PDOException $e) 
{ 
    $errormessage = '<p> 
            Regelnummer: '.$e->getLine().'<br /> 
            Bestand: '.$e->getFile().'<br /> 
            Foutmelding: '.$e->getMessage().' 
        </p>'; 

    trigger_error($errormessage); 
} 

我有一種感覺,我錯過了什么。 我不確定 lastinsertid 是否寫得好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM