Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [PHP] Pdo Connection Call to a member function on a non-object

    Ciao a tutti stavo provando a creare una classe pdo ma mi sono bloccato alla gesione degli errori.
    Inserendo volutamente dei parametri errati nel costruttore, generando così l'eccezione, la riga
    $this->getErr("Errore di Connessione"); mi da il seguente errore
    Fatal error: Call to a member function getErr() on a non-object
    e non riesco proprio a capire il perchè.
    Codice PHP:
    <?php
    class db extends PDO {   
        private 
    $mailerr false;
        private 
    $logfile false;
        private 
    $mailto "indirizzi_mail";
        
        public function 
    __construct $server "localhost"$username "user"$password "pwd"$dbname "nomedb" ) {   
            
    $dns = ($dbname) ? "mysql:host={$server};dbname={$dbname}"mysql:host={$server}";      
            try{    
                
    parent::__construct($dns$username$password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));   
            }catch (
    PDOException $e) {
                
    $this->getErr("Errore di Connessione");
            }
        }
        
        private function 
    getErr($error ""){
            
    // se bisogna mandare la mail
            
    if($this->mailerr){
                
    $testo "Si è verificato un errore: ".$error." \r\n \r\n Indirizzo del file chiamato: ".$_SERVER['REQUEST_URI'];
                
    $subject "db extends Pdo: Error.";
                    
    //$headers  = "From: $to\r\n";
                    //$headers .= "Reply-To: $to\r\n";
                    //$headers .= "Return-Path: $to\r\n";
                
    if(!mail($to$subject$testo$headers))
                    die(
    "Errore durante l'invio della Segnalazione!");
            }

            if(
    $this->logfile){
                
    $fp = @fopen($this->logfile"a");
                @
    fwrite($fpdate("d/m/Y H:i:s")." - Si è verificato un errore: ".$e->getMessage()."\r\n");
                @
    fclose($fp);
            }

            if(
    $this->dieerror){
                die(
    "Oops! Si e' verificato un errore interno.
    "
    .$error."
    Stiamo lavorando per risolverlo."
    );
            }
        }    
    }  
    ?>
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Evidentemente c'e' qualche errore nei dati di connessione, quindi il costruttore fallisce e l'oggetto non viene istanziato (quindi non puoi chiamare suoi metodi).

    Metti un "echo $e->getMessage()" nel catch block e vedi qual e' l'errore.

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ok ho capito qual'è errore però non riesco a capire il modo più corretto per proseguire.
    Nel senso io desideravo intercettare l'errore di connessione egestirlo nel metodo geterr generando il file e mandando la mail.
    come mi consigli di fare?
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Devi gestire l'exception fuori dal costruttore, perche' e' la creazione stessa dell'oggetto l'evento che puo' fallire.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.