【问题标题】:avoid multiple mysqli connection with db class避免与 db 类的多个 mysqli 连接
【发布时间】:2017-01-01 21:30:41
【问题描述】:

我刚刚开始 oop,现在,即使是非常简单的事情也让我感到困惑! 这是我的 mysqli 连接类:

class DB{
    private $con;
    public function __construct(){
        $this->con=new mysqli('localhost','root','','dbName');
        if(!$this->con){
            echo '<b>There was a problem connecting to database! </b><br />errno: '.$con->connect_errno;
            exit;
        }
        $this->con->set_charset("utf8");
    }
    public function query($query){
        return $this->con->query($query);
    }
}

假设我要这样使用它:

$a=mysqli_real_escape_string($_POST['a']);
$b=mysqli_real_escape_string($_POST['b']);

$query='SELECT `name` FROM `someTable` WHERE `type`={'.$a.'}';
$query2='SELECT `name` FROM `someTable` WHERE `type`={'.$b.'}';

$DB = NEW DB;
$test=$DB->query($query);

$DB2 = NEW DB;
$test2=$DB2->query($query2);

我刚刚从类 DB 创建了 2 个对象。 这是否意味着每个对象都有一个新的 mysql 连接?如果是,我该如何避免?

我知道我可以在 __destruct() 函数中使用 mysqli_close(),但我在某处(可能在这个站点 :) 中读到创建和销毁多个 mysql 连接并不好。

我该怎么办? p.s:另外,正如我所说,我是 oop 的新手(以及 mysqli),所以如果对我的课程有任何评论(例如,我是否将字符集设置在正确的位置?)我会很荣幸。

【问题讨论】:

    标签: php oop mysqli


    【解决方案1】:

    当你创建一个类的实例时,如果它工作正常,你不需要重新创建它。

    示例 1

    在您的问题中,您这样做了:

    $DB = new DB();
    $test=$DB->query($query);
    
    $DB2 = new DB();
    $test2=$DB2->query($query2);
    

    您可以这样做:

    $DB = new DB();
    $test = $DB->query($query);
    $test2 = $DB->query($query2);
    

    示例 2

    有时您有一个实例,并且想在任何地方使用它。您可以在代码开头或第一次请求时创建它。然后你可以在任何地方使用它。

    $DB = new DB();
    
    function something(){
    
        global $DB;
    
        $test = $DB->query($query);
    }
    

    如果您的类如您在此处提到的那样简单,请像第一个示例一样使用它。此方法适用于需要从任何地方访问的实例。一个函数更改其中的某些内容,另一个函数使用该更改。

    此方法也被视为不好的做法,因为它使您的代码更难阅读和调试。

    一些有用的链接:

    【讨论】:

    • - 请....在 oop 标签中使用global 变量....今天是 2017 年!?
    • @pomaxa 你是对的。对实例使用全局变量不是一个好习惯。但这是一个示例,说明您是否真的想在任何地方使用在您可以使用之前创建的实例。
    • - 我只是留下一个类似问题的链接:stackoverflow.com/a/219599/164803
    • @pomaxa 我将您的链接添加到我的答案中;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多