簡體   English   中英

PHP與MySQL的多個連接-最佳實踐

[英]PHP multiple connections to MySQL - best practice

我對PHP Mysql連接的最佳做法有疑問。 現在,我有一個具有數千行的數據庫。 該行包含例如產品說明。 但是在行中,我沒有名字,但名稱為ID,我沒有顏色,但顏色為ID等。我這樣做是因為當我必須使用名字或顏色時,我只能在表COLORS中更改名稱和顏色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獲取數據到數組,然后在獲取查詢時在函數中處理它們?

為單個查詢建立連接是很糟糕的做法,因此要對同一個數據庫建立多個連接。 通常,您在腳本的開頭與一個數據庫建立單個連接,並在結尾處將其關閉。 您可以始終使用$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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM