Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कनेक्शन के लिए MySQLi क्लास पैटर्न, बंद करें, खुला छोड़ दें?

मैं इसे अच्छा अभ्यास नहीं मानूंगा। यह विशेष रूप से एक कारण के लिए है:आप जिस समस्या का वर्णन करते हैं वह आपको क्यों लगता है कि आपको इसकी आवश्यकता है:प्रति अनुरोध केवल एक कनेक्शन।

आपको कुछ भी कोड करने की आवश्यकता नहीं है। mysqli डिफ़ॉल्ट कनेक्शन में एक अच्छी सुविधा का निर्माण होता है। हर बार जब आप एक नया इंस्टेंस बनाते हैं तो यह आईएनआई सेटिंग्स (कॉन्फ़िगरेशन) से डेटाबेस कनेक्शन पैरामीटर चुनता है:

$db = new mysqli;

चूंकि स्क्रिप्ट समाप्त होने पर सभी डेटाबेस कनेक्शन बंद हो जाते हैं, इसलिए इसकी परवाह करने के लिए बहुत कुछ नहीं है। केवल एक चीज जो आपको करने की आवश्यकता है वह है एक बार कनेक्शन को इंस्टेंट करना और वेरिएबल को उन सभी कोड में पास करना जो उस mysqli की आवश्यकता है वस्तु।

एक और बुरी प्रथा यह है कि आप एक Singleton यहाँ, कुछ इस तरह:

class MysqliSingleton extends mysqli
{
    private static $instance;
    /**
     * @return MysqliSingleton
     */
    public function getInstance()
    {
        if (NULL === self::$instance)
            self::$instance = new self();
        return self::$instance;
    }
    private function __construct()
    {
    }
    public function __clone()
    {
         throw new RuntimeException('Clone is not allowed.');
    }
    public function __wakeup()
    {
        throw new RuntimeException('Unserializing is not allowed.');
    }
}

यह इस तरह काम करेगा:

$mysqli = MysqliSingleton::getInstance();

और हमेशा उस एक mysqli उदाहरण को वापस कर देगा, जो कि आप जो खोज रहे हैं वह हो सकता है। हालांकि सिंगलटन हानिकारक माना जाता है क्योंकि वे बहुत सारी समस्याएं पेश कर सकते हैं संबंधित प्रश्न देखें सिंगलटन की जरूरत किसे है?

यह आसान है कि आप अपने आप को एक वैरिएबल बनाते हैं जिसे आप डेटाबेस इंस्टेंस वाले पास करते हैं। यदि आपके एप्लिकेशन को हमेशा एक mysqli कनेक्शन की आवश्यकता नहीं होती है, तो आप किसी प्रकार की आलसी-लोडिंग को अतिरिक्त रूप से समाहित कर सकते हैं, उदा। एक बहुत ही सरल संदर्भ वर्ग के साथ:

interface ContextMysqli
{
    /**
     * @return mysqli
     */
    public function getMysqli();
}

class Context implements ContextMysqli
{
    private $mysqli;
    public function getMysqli()
    {
        $this->mysqli || $this->mysqli = new mysqli();
        return $this->mysqli;
    }
}

जब आपकी स्क्रिप्ट शुरू होती है, तो बस अपने संदर्भ को तत्काल करें और इसे अपने कोड के हर हिस्से में पास करें जहां आपको इसकी आवश्यकता हो:

$context = new Context();
...
$result = do_some_db_work($context);
...
function do_some_db_work(ContextMysqli $context)
{
    $mysqli = $context->getMysqli();
    ...
}

यह सुझाव थोड़ा अदूरदर्शी भी हो सकता है, लेकिन यह एक सिंगलटन से बेहतर है जबकि ज्यादा हलचल नहीं है। लाभ यह है कि आपने mysqli . बनाने के लिए तर्क को समझाया है ऑब्जेक्ट w/o सिंगलटन की आवश्यकता। आपका कोड अब वैश्विक या स्थिर संदर्भ से स्वतंत्र है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल लगातार पंक्तियों की गिनती करता है जो मेल खाते हैं

  2. MySql:एक पंक्ति डालें और सामग्री प्राप्त करें

  3. सदस्यता। एएसपीनेट मुद्दे में MySQL के लिए प्रदाता

  4. स्वरूपण मुद्दों को एक्सेल करने के लिए mysql

  5. एसक्यूएल - कैसे स्थानांतरित करने के लिए?