Gestion des erreurs Mysql en production

WRInaute accro
Salut

Actuellement j'ai la méthode suivante :

Code:
public function executerRequete($sql, $params = null) {

        $debut = $this->getMicrotime();
        
        try{        
                if ($params == null) {
                  $resultat = $this->getBdd()->query($sql);    // exécution directe
                }
                else {
                  $resultat = $this->getBdd()->prepare($sql);  // requête préparée
                  $resultat->execute($params);               
                }
        }catch (PdoException $e) {               
                
            //en cas de commit cette ligne annule tous (transactions)
            try {
               $this->getBdd()->rollback();
            }
            catch(Exception $e) {
        
               $message=$e->getMessage();
               
               $objLogs = new Logs();
               $objLogs->createLog("erreurspdo", $e->getFile()."\r\n".$e->getMessage()."\r\n".$sql);
               
               die("Désolé une erreur s'est produite au niveau de notre base de donnée. Le problème technique a été transmis et sera corrigé dans les plus brefs délais. <a href=\"".URL_INTER."\">Retour à la page d'accueil</a>");
            }
            
            $message="Désolé une erreur s'est produite au niveau de notre base de donnée. Le problème technique a été transmis et sera corrigé dans les plus brefs délais.";
            $objLogs = new Logs();
            $objLogs->createLog("erreurspdo", $e->getFile()."\r\n".$e->getMessage());	
            
            die($message.", <a href=\"".URL_INTER."\">retour à la page d'accueil</a>");           
        } 
        
        $fin = $this->getMicrotime();
        $time = $fin - $debut;
       
        if($time>self::TIME_ALERT)
        {
          $objLogs = new Logs();
          $objLogs->createLog("time", $time."\r\nRequête :".$sql."\r\n");
        }
    
        return $resultat;
    }

Explication, en phase de développement j'ai ceci :
Code:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

Par conséquent lorsque j'ai une erreur mysql, j'ai une execption de lancée qui crée un log avec la requête et l'url de la page concernée

Mais en production je devrais mettre ceci :
Code:
PDO::ATTR_ERRMODE => ERRMODE_SILENT

Par conséquent aucune exception ne sera lancée et aucun log ne sera crée, je n'aurais donc aucun moyen en prod de déterminer si des erreurs mysql ont eu lieu.

Comment faire pour que le log soit bien créé en mode SILENT? Et que je soit bien informé des erreurs.

Sachant que je suis (serais) en mutualisé, et que question logs d'erreurs accessibles et efficace, je crois qu'on reste assez limité.
 
WRInaute accro
J'ai peut être pas été très clair :?

Pour faire simple peut-on laisser ce mode en production : PDO::ERRMODE_EXCEPTION

Et donc continuer à intercepter les pdoexception.

Du moment qu'on affiche pas l'erreur mysql mais une phrase générale du type "Une erreur dans la bDD c’est produite", ça ne pose aucun soucis non?

Vous, que faites vous? mettez vous le mode silence? PDO::ERRMODE_SILENT
 
Discussions similaires
Haut