我必须从至少3个数据库中提取数据,重用我的PDO对象有什么问题吗?
$dbh = new PDO('MysqL:host=' . $host . ';dbname=' . $db_name, $user, $password);
$sth = $dbh->prepare($query1);
// do something
$dbh = new PDO('MysqL:host=' . $host2 . ';dbname=' . $db_name2, $user2, $password2);
$sth = $dbh->prepare($query2);
//do something else
抱歉编辑,但这是另一个考虑因素.对于其中的每一个,我显然应该检查连接是否成功,如果不是,则抛出异常:
if (!$dbh) {
$err=$dbh->errorInfo();
throw new Exception('Could not connect: ' . $err[2]);
}
我不认为有办法避免这种情况,除非我同时创建所有连接并执行if(!dbh1 |!dbh2){…}.还有别的东西需要考虑.
解决方法:
将$dbh分配给新的PDO()时,技术上不会重用pdo对象.您正在创建一个新的PDO实例并将其分配给您之前使用过的变量.只要您了解程序中发生的事情,这样做就没有错.
编辑:
With each of these I obvIoUsly should check whether or not the connection was successful and throw an exception if it wasn’t:
您可以在try catch中包围连接尝试,这是处理连接错误的典型策略:
<?PHP
try {
$dbh = new PDO('MysqL:host=localhost;dbname=databaseName', $userName, $password);
foreach($dbh->query('SELECT * from TableName') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $ex) {
print "Error!: " . $ex->getMessage() . "<br />";
die();
}
?>