PHP-在mysql类数据库中打开一个或多个连接?

PHP-在mysql类数据库中打开一个或多个连接?,php,mysqli,Php,Mysqli,我正在为mysql创建一个“DB”类。 DB类将与我的项目中的其他类聚合 index.php $db = new DB(); $fo = new Foo($db); print_r($db->query("SELECT * FROM tbl")); print_r($fo->testSelect()); 福类 class Foo { /** * Constructor * Aggregate class db object */ pub

我正在为mysql创建一个“DB”类。 DB类将与我的项目中的其他类聚合

index.php

$db = new DB();
$fo = new Foo($db);

print_r($db->query("SELECT * FROM tbl"));

print_r($fo->testSelect());
福类

class Foo {

    /**
    * Constructor
    * Aggregate class db object
    */
    public function __construct( DB $db ) {
       $this->db = $db;
    }

    public function test() {
       return $this->db->query("select * from tbl");
    }
}
我的疑问是如何使用与数据库的连接来充分利用资源。 在DB类中,最好在运行查询(更新、选择等)时打开连接,或者在构造函数中打开一次连接

DB级(1)

DB级(2)

哪个是正确/更好的解决方案?
谢谢

一般来说,最好尽量减少对数据库的调用次数。为每个查询打开和关闭数据库连接是浪费开销的,如果存在大量查询,则会降低应用程序的速度


此外,每次关闭连接时,都会丢失任何数据库会话状态。因此,如果您在一个查询中设置用户变量,然后尝试在另一个查询中使用它们,这将不起作用。或者,如果您设置会话变量,如
设置时区=…
,则会丢失该变量。像
LAST\u INSERT\u ID()
if ( !class_exists( 'DB' ) ) {

    class DB {

        private function connect() {
            $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
            if ( $mysqli->connect_error ) {
                die( "Connection failed: " . $mysqli->connect_errno . ' ' . $mysqli->connect_error );
            } else {
                $mysqli->set_charset(DB_CHARSET);
            }
            return $mysqli;
        }

        public function query( $query ) {
            $db = $this->connect();
            $result = $db->query( $query );
            while ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {
                $results[] = $row;
            }
            $result->free();
            $db->close();
            return $results;
        }

        ..insert, update, delete function..
    }
}
if ( !class_exists( 'DB' ) ) {

    class DB {

        private mysqli;

        public function __construct() {
            $this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
            if ( $this->mysqli->connect_error ) {
                die( "Connection failed: " . $this->mysqli->connect_errno . ' ' . $this->mysqli->connect_error );
            } else {
                $this->mysqli->set_charset(DB_CHARSET);
            }
            return $this->mysqli;
        }

        public function query($query) {
            $result = $this->mysqli->query( $query );
            while ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {
                $results[] = $row;
            }
            $result->free();
            return $results;
        }

        ..insert, update, delete function..

        public function __destruct() {
            $this->mysqli->close();
        }
    }
}