这个类会启动第二个mysql连接吗?

时间:2012-06-19 18:27:51

标签: php class inheritance

从MySQL迁移到MySQLi和OO代码之后,我开始创建我的第一个数据库类。经过我读过的大量教程后,我留下了一个简单的谜题:我的代码会打开两个与MySQL的连接,如果是这样,我怎么能阻止它呢?我目前正在使用一个表(azgoth_en)用于一般用户数据,另一个用于会话数据(为其构建第二个类)。我的代码如下:

class db {
        protected $connection, $lang;

        [...]

        function __construct($db='azgoth_en',$lang='en',$host='localhost',$uz='root',$pw='') {
            $this->lang=$lang;
            $mysqli=mysqli_connect($host,$uz,$pw,$db);
            if ($mysqli) {
                $this->connection=$mysqli;
                unset($mysqli);
            }
            else die('Mysql failed ('.mysqli_errno($mysqli).'): '.mysqli_error($mysqli));
        }       
    }

    class sessions extends db {
        var $connection;

        function open() {return true;}
        function close() {return true;}

        function read($id){
        $foo=$this->connection;
        var_dump($foo);
        #echo '_read var dump: ',var_dump(parent::query("SELECT * FROM sess")),'<hr>';
        #$id=parent::connection->real_escape_string($id);
        /*$result=mysqli_query($langCon,"SELECT `data` FROM `sess` WHERE `id`='{$id}' LIMIT 1");
        if ($result && mysqli_num_rows($result)) {
            echo '_read result found<hr>';
            $record = mysql_fetch_assoc($result);
            return $record['data'];
        } */
        return null;
        }
    }
    $db=new db;
    $sessions=new sessions;

请原谅我,如果这对大多数人来说似乎是常识,但我读过的每一个教程都只提到静态方法/变量继承,而不是我在这里遇到的事情。

1 个答案:

答案 0 :(得分:1)

每次实例化对象时都会打开一个连接,例如

$db1 = new db;
$db2 = new db;
$db3 = new db;

将为您提供3个具有3个独立连接的数据库对象。如果您只想要一个SINGLE数据库连接,无论db对象被实例化多少次,那么您将需要考虑使用singleton