如何防止多次连接到数据库



这是我的代码

PDO.php

class Connection {  
   public function __construct() {  
      $this->connect ($db);  
   }  
private function connect($db) {  
    try {  
        if (! $db){  
                  $this->db = new PDO ( 'mysql:host=localhost;dbname=Shopping;charset=utf8', 'xxxx', 'xxxxx' );  
                  echo 'Connected';  
                  return $this->db;  
        }  
        catch ( PDOException $conError ) {  
        echo 'failed to connect DB' . $conError->getMessage ();  
    }  
 }  
}

产品.php

class ProductInsert extends Connection {  //here my function is called multiple times 
    function __construct() {  
         parent::__construct($db);  
    }    
    public function prdInsert(.....)  
    {  ........}

在这里,我的问题是数据库连接多次打开。 当我调用 productInsert(( 时,数据库连接会打开,我该如何防止这种情况

不要从数据库类扩展应用程序类。

这是你的主要问题.
它们太不同了,没有任何共同点.
因此,您只需将 db 对象用作属性即可。

连接类目前也毫无用处,因为它只是 PDO 的一个泄漏伪装。

因此,只需创建原始PDO对象,然后将其传递到产品的构造函数中

class ProductInsert
{
    function __construct(PDO $db)
    {  
        $this->db = $db;  
    }    
    public function prdInsert(.....)  
}

为了善良起见,请学会缩进您的代码。

 class Connection {  
        public function __construct($db) {  
        return $this->connect($db);  
        }  
        private function connect($db) {  
        try {  
        if (! $db){  
        $db = new PDO ( 'mysql:host=localhost;dbname=Shopping;charset=utf8', 'xxxx', 'xxxxx' );  
        echo 'new connection';  
        }
        return $db;  
        }  
        catch ( PDOException $conError ) {  
        echo 'failed to connect DB' . $conError->getMessage ();  
        }    
        }
}

这是解决方案
PDO.php

class Connection {
// Declare instance  
private static $instance = NULL;  
// the constructor is set to private so so nobody can create a new instance using new
private function __construct() {
// maybe set the db name here later 
}
// Return DB instance or create intitial connection @return object (PDO) @access public
public static function getInstance() {
    if (! self::$instance) {
        self::$instance = new PDO ( 'mysql:host=localhost;dbname=Shopping;charset=utf8', 'root', 'vss0ftech' );
        self::$instance->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        echo 'connected';
    } else
        echo 'connection is already existed';
    return self::$instance;     
}
// Like the constructor, we make __clone private so nobody can clone the instance
PRIVATE FUNCTION __CLONE() {
}
}

产品.php

在这里我们可以像这样调用该方法

class ProductInsert {  
    public function prdInsert(.....) {  
        $result_By_Vendor_And_Title = Connection::getInstance ()->query ( "select * from........)  
     }  
  }

相关内容

  • 没有找到相关文章

最新更新