2016-03-09 2 views
0

это мой php-код. Проблема связана с db-соединением и db. У меня слишком много ошибок подключения. я использовал $ db = null;, но у меня опять ошибка. Что я могу сделать? спасибо ...pdo слишком много соединений, предложение

db.php

public function getConnection(){ 

     $this->conn = null; 

     try{ 
      $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name .";charset=utf8", $this->username, $this->password); 
     } 

     catch(PDOException $exception){ 
      echo "Connection error: " . $exception->getMessage(); 
     } 

     return $this->conn; 
    } 
} 


$database = new Config(); 
$db = $database->getConnection(); 

data.inc.php

include 'db.php'; 

private $table_name = "contents"; 

public function __construct($db){ 
     $this->conn = $db;  
    } 

function dbclose() { 

    $this->conn = null; 

    return true; 
    } 

     function readContents($page, $from_record_num, $records_per_page,$category){ 


      $query = "SELECT 
        * 
       FROM 
        " . $this->table_name . " where cat_id = ? 
       ORDER BY 
       date desc 
       LIMIT 
        {$from_record_num}, {$records_per_page}"; 

     $stmt = $this->conn->prepare($query); 
     $stmt->bindParam(1, $cat_id); 
     $stmt->execute(); 

     return $stmt; 
    } 

index.php

$stmt1 = $product->readContents(1, 0, 20, 1); //page,0,20 list contents,category 1 
    $stmt2 = $product->readContents(1, 0, 20, 5); //page,0,20 list contents,category 5 
    $stmt3 = $product->readContents(1, 0, 20, 13); //page,0,20 list contents,category 13 

while ($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)){ //20 contents in category 1 } 
while ($row2 = $stmt2->fetch(PDO::FETCH_ASSOC)){ //20 contents in category 5 } 
while ($row3 = $stmt3->fetch(PDO::FETCH_ASSOC)){ //20 contents in category 13 } 

$product->dbclose(); 

я использовал $ дб нуль; но, у меня снова слишком много ошибок подключения. Что я могу сделать ?

+1

Можете ли вы добавить информацию об отладке для регистрации количества раз? GetConnection() 'получает вызов? Возможно, вам удастся использовать шаблон singleton, чтобы ограничить количество подключений db к одному. – maxhb

+0

Если эти функции на самом деле являются методами в классе, вы можете сделать это простым, добавив 'class xxx {' где-то соответствующее – RiggsFolly

+0

Также убедитесь, что вы не вызываете 'getConnection()' повсюду. Для каждого сценария требуется только одно соединение для запуска многих запросов. Вот почему вы делаете это в классе и храните одно соединение для многократного использования. – RiggsFolly

ответ

0

Вероятно, вы должны изменить свой Config класс использовать одноплодный шаблон так, чтобы он только не создает один экземпляр подключения к БД:

class Config { 
    static $conn = false; 

    public function getConnection(){ 

     if(static::$conn === false) { 
     // no db connection established: create one 
     try{ 
      static::$conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name .";charset=utf8", $this->username, $this->password); 
     } 

     catch(PDOException $exception){ 
      echo "Connection error: " . $exception->getMessage(); 
     } 
     } 

     return static::$conn; 
    } 
} 

Это предписывает использование одного подключения к БД, независимо от того, как часто getConnection() получает называется.

Смежные вопросы