Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    PDO + Mysql e SQLSTATE[08004] [1040] Too many connections

    Ciao a tutti ho fatto un piccolo gestionale che usa una connesione PDO ad un DB Mysql...
    Messo online ogni tanto mi da questo errore:

    SQLSTATE[08004] [1040] Too many connections

    Ho creato una mia classe...
    e un file di configurazione che includo in ogni pagina del gestionale

    file di configurazione...
    codice:
    include_once ($_SERVER['DOCUMENT_ROOT'].'/class/class_project.php');
    
    $class_project = new class_project();
    
    $class_project->connection_db();
    dal file di configurazione richiamo la connessione a db... che è la funzione seguente
    codice:
    public function connection_db()
    {
             // INCLUDO LA CLASSE NestedPDO (estende la classe PDO e permette di fare un rollaback totale... in funzioni che hanno + transazioni separate) 
              include_once($_SERVER['DOCUMENT_ROOT'].'/class/NestedPDO.php');
            
                    $this->pdo ="";    
                   
                            $HOST = $this->HOST_PROD;
                            $USERNAME =$this->USERNAME_PROD;
                            $PASSWORD =$this->PASSWORD_PROD;
                            $DATABASE =$this->DATABASE_PROD; 
                          
                       // PDO     
                        $this->pdo = new NestedPDO("mysql:host=" . $HOST . ";dbname=" . $DATABASE, $USERNAME, $PASSWORD); 
                        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        
                        $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
                    } catch(PDOException $err) {
    
                       die("Errore durante la connessione al database!: ".$err->getMessage() );
    
                    }
                        
        }
    non capisco se il problema "troppe connessioni" sia un problema di codice php... o di server...

    ho letto qualcosina in giro su come poter riusare la stessa connessione a db senza crearne sempre una nuova... ma non ci ho capito molto...
    non è corretto aprire una connessione ogni volta che apri una pagina? (comprese chiamate ajax varie)

    ...mi servirebbe qualcuno che mi illumini e mi riesca a dare qualche indicazione su come risolvere questa cosa... o cosa settare.. o guardare su server..non so.. ho spiato nel cpanel.. ma non ho trovato nulla che parli di numero di connessioni...

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,190
    è un errore di MySQL, hai superato il massimo di connessioni permesse
    se non sbaglio, è un parametro che sta nella configurazione di MySQL e può essere modificato (non so se il tuo hosting ti consenta di farlo)

    però fossi in te cercherei di capire come mai saturi le connessioni, analizzando bene il tuo codice

  3. #3
    Quote Originariamente inviata da clasku Visualizza il messaggio
    però fossi in te cercherei di capire come mai saturi le connessioni, analizzando bene il tuo codice
    eh... infatti ho postato il codice che uso proprio per quello ...
    per capire se c'è qualcosa di sbagliato nel codice o se sia solo un problema di server e di configurazione dello stesso.

    ovviamente non ho postato tutto il codice delle varie pagine.. ma appunto la parte che riguarda la connessione.

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,190
    eh, OK
    ma se tu nello stesso script o in successivi istanzi una classe che fa la connessione al DB per ogni cosa che devi fare, come facciamo a saperlo?

  5. #5
    io come detto all'inizio, includo, istanzio la classe e richiamo la funzione di connessione al db, una volta all'inizio di ogni pagina php, che sia una pagina classica o una pagina php richiamata tramite ajax.

    non richiamo la funzione di connessione in altri punti.

    non richiamo funzioni di chiusura connessione al db, anche perchè da quanto so la connessione viene autochiusa alla fine della pagina stessa.

    per chiarire ulteriormente, la funzione di apertura connessione non è nel construct della classe... non viene richiamata quindi quando istanzio la classe, ma la richiamo io direttamente una volta ad inizio pagina, come si vede da codice postato.

    se mi sono spiegato male o non ho capito... sono qui, fatemi sapere. ^^

  6. #6
    Codice PHP:
    <?php

    //test.php

    $connections = [];

    foreach(
    range(1,1000) as $i)
    {
       try{
           
    $connections[] = new Pdo(/* dns per connessione, se vuoi poi provare anche quella NestedPDO anche se non serve .....*/);
       }catch(\
    Exception $ex){
          echo 
    $ex->getMessage();
          break;
       }

    }

    echo 
    "ho aperto ".count($connections)." connessioni";
    se fai una paginetta del genere e la metti sul tuo host e la richiami, che ti stampa?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.