php – 可以在类之间维护PDO连接吗?

我正在尝试创建一个简单的查询库,我正在使用PDO进行数据库访问.

假设我有以下两个类:

class FirstClass {
    var $dbh;

    function __construct($host,$dbname,$user,$pw) {
        $this->dbh = new PDO ("mysql:host=$host;dbname=$dbname",$pw);
    }

    function use_second($foo) {
        return new SecondClass ($foo,$this->dbh);
    }
}

class SecondClass {
    function __construct($foo,$dbh) {
        $sth = $dbh->prepare('SELECT * FROM atable WHERE bar = :foo');
        $sth = $sth->execute(array('foo'=>$foo));
        // do something with the query
    }
}

这是在类之间使用相同PDO连接的正确方法吗? – 因为我似乎遇到了一些问题,例如,如果我从第二个类中var_dump我的连接,我得到:

object(PDO)#2 (0) { }

当然那不对?

另外,如果我运行一个select查询,然后转储$sth变量,我只得到:

bool(true)

这是因为我错误地处理了连接吗? – 如果是这样,我怎样才能在类之间正确使用相同的连接?

最佳答案
发生这种情况,因为你覆盖$sth,这是你的语句,但现在是一个布尔值:

class SecondClass {
    function __construct($foo,$dbh) {
        // returns PDOStatement:
        $sth = $dbh->prepare('SELECT * FROM atable WHERE bar = :foo');
        // returns boolean:
        $sth = $sth->execute(array('foo'=>$foo));
        // do something with the query
    }
}

要纠正它,只是不要覆盖$sth,这样你就可以从中获取结果:

class SecondClass {
    function __construct($foo,$dbh) {
        // returns PDOStatement:
        $sth = $dbh->prepare('SELECT * FROM atable WHERE bar = :foo');
        // returns boolean:
        $success = $sth->execute(array('foo'=>$foo));
        // do something with the query
        if ($success) {
            // do something with $sth->fetchAll() or $sth->fetch(),or anything
            $all_the_results = $sth->fetchAll();
        };
    }
}

相关文章

navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql...
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能...
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新...
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应...