【问题标题】:Best way for connecting to two databases using pdo使用 pdo 连接到两个数据库的最佳方法
【发布时间】:2016-09-18 21:28:16
【问题描述】:

我想连接到两个数据库。
第一个是旧数据库。
第二个是新数据库。

我必须将数据从旧数据库传输到新数据库,首先我想知道如何使用 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);
}

【问题讨论】:

  • 两个数据库是否在同一台服务器上?
  • 不清楚你在问什么问题。请修改您的问题以明确您正在寻找什么类型的答案。当您运行您提供的代码时会发生什么?

标签: php mysql database pdo


【解决方案1】:

如果两个数据库位于同一台服务器上,则无需建立两个 PDO 连接。 PDO DSN 中指定的数据库只是默认数据库,但您可以使用表名前的前缀访问其他数据库。如果两个表的架构相同,则可以使用:

INSERT INTO newdb. gebruikers
SELECT * FROM olddb. gebruikers

【讨论】:

    【解决方案2】:

    我认为将数据库从旧数据库转移到新数据库的代码如下所示:

    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写得好不好。

    【讨论】:

    • 这应该是一个答案吗?看起来它是问题的一部分,因此您应该将其编辑到问题中。
    • 由于您明确插入idlastInsertId() 将不起作用。这仅在您省略自动递增列并且数据库自动分配它时使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多