PHP与MySQL的多个连接 - 最佳实践

时间:2017-10-31 17:44:21

标签: php mysql mysqli

我对PHP Mysql连接的最佳实践有疑问。 现在我有一个包含数千行的数据库。该行包含例如产品的描述。但在行中我没有名称,但ID没有名称,我没有颜色,但颜色的ID等。我正在这样做因为我必须改变名称或颜色 - 然后我只是更改表中的名称颜色和颜色ID保持不变。这样可以吗?

我问,因为有时我遇到与mysqli有多个连接的问题。下面我展示了我的工作方式:

    // connection
        function getConnected($host,$user,$pass,$db) {

           $mysqli = new mysqli($host, $user, $pass, $db);
            $mysqli->set_charset("utf8");
           if($mysqli->connect_error) 
             die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());


           return $mysqli;
        }

        function msq(){

            return getConnected('127.0.0.1','root','','database');

        }

// functions

function getcolor($temp){

   $db2=msq();

    if($result = $db2->query("SELECT * FROM linkcolor WHERE idcolor='$temp' ")){

            if($result->num_rows > 0) {

                $res = $result->fetch_assoc();

                return $res['name'];

            }else{
                return 'none';
            }

    }else{
        return 'none';
    }

}    

function getname($temp){

   $db2=msq();

    if($result = $db2->query("SELECT * FROM linkname WHERE idname='$temp' ")){

            if($result->num_rows > 0) {

                $res = $result->fetch_assoc();

                return $res['name'];

            }else{
                return 'none';
            }

    }else{
        return 'none';
    }

}  


    // query

    if($quer = $db->query("SELECT * FROM products")){

                    if($quer->num_rows > 0) {

                        while($qr = $quer->fetch_assoc()){

                         echo getcolor($qr['idcolor']);
                         echo getname($qr['idname']);

                        }

                    }else{

                    }

        }else{

    }

这是一个好方法吗?或者更好的是从mysql获取数据到数组,然后在我提取查询时在函数中处理它们?

1 个答案:

答案 0 :(得分:-1)

为单个查询建立连接是一个糟糕的实践,因此多个连接到同一个数据库。通常,您在脚本开头处与一个数据库建立单个连接,并在结束时将其关闭。您始终可以使用$GLOBALS访问您创建的mysqli链接或为此创建静态类:

static class DB {
    static protected $link = null;

    static public function getLink() {
        if (self::$link === null) {
            self::$link = msq();
        }
        return self::$link;
    }
}

然后您可以使用

访问您的连接
$db2 = DB::getLink();