2016-09-18 138 views
-2

我想連接到兩個數據庫。
第一個是舊的數據庫。
第二個是新的數據庫。使用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); 
} 
+0

這兩個數據庫是否位於同一臺服務器上? – Barmar

+0

目前還不清楚你問的是什麼問題。請修改您的問題,以明確您要查找的答案類型。當你運行你提供的代碼時會發生什麼? –

回答

0

我認爲對於代碼將數據庫從舊的轉移到新的人會是這樣的下面:

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是否寫得好。

+0

這應該是一個答案?它看起來是問題的一部分,所以你應該把它編輯成問題。 – Barmar

+0

由於你明確插入了'id',因此'lastInsertId()'不起作用。只有當您省略自動遞增列並且數據庫自動分配它時纔會使用它。 – Barmar

1

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

INSERT INTO newdb. gebruikers 
SELECT * FROM olddb. gebruikers