php – 使用PDO时重用变量

我必须从至少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();
    }
?>

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...