0

在从 MySQL 迁移到 MySQLi 和 OO 代码之后,我开始制作我的第一个 DB 类。在阅读了许多教程之后,我留下了一个简单的谜题:我的代码会打开两个到 MySQL 的连接,如果是,我该如何阻止它?我目前使用一个表 (azgoth_en) 用于一般用户数据,另一个表 sess 用于会话数据(为其构建第二个类)。我的代码如下:

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;

如果这对你们大多数人来说似乎是常识,请原谅我,但我读过的每一个教程都只提到了静态方法/变量继承,而没有提到我在这里实际遇到的内容。

4

1 回答 1

1

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

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

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

于 2012-06-19T18:30:18.637 回答