[英]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.