Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema Try e Catch

  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    1,921

    Problema Try e Catch

    Ho un file che utilizzo per fare aggiornamenti sul db e ogni volta che eseguo una query mi salvo quella query in un file di testo per tenere traccia di ciò che succede.
    Vorrei però tenere traccia di eventuali errori quando si esegue quella pagina. (Ovviamente ora la lancio manualmente e posso vedere l'output degli errori ma più avanti non sarà cosi)

    Ho fatto così:
    Codice PHP:
    try {
    // creo la mia query, la eseguo e la salvo su un file di log
    }catch (Exception $e) {
        echo 
    'Errore: ',  $e->getMessage(), "\n";
    // adesso x farla facile è un echo, lo salverò poi su un files

    Per testare il codice ho creato un errore di sintassi sulla query e il risultato è stato che ho si visto il "fatal error", ma il mio codice non è andato nel catch e non ha stampanto "errore: fatal error bla bla"
    Come mai? ho modo di avere anche i warning?
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    443
    Dipende un po' da che codice usi per gestire il database, mysqli o pdo?
    E' possibile che il codice dentro al catch non generi una exception e che quindi tu non riesca a prenderla nel blocco catch.
    Per esempio pdo di default non genere exception sugli errori, bisogna prima configurarlo in modo che lo faccia.

    Puoi postarci tutto il codice così magari riusciamo a darti informazioni più precise?

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    1,921
    Uso Mysqli non avevo postato il codice completo perchè era lunghino, vedo di semplificarlo.
    Inizialmente leggo un file csv con i dati e li inserisco in un array su cui faccio il ciclo riga per riga.
    In teoria se la mia riga esite faccio un update, altrimenti faccio un insert (per semplificare faccio sempre un update)
    SqlDebug($qwt, $par); è una funzione che data la mia query e i miei parametri mi restituisce la query che esegue mysql in modo da salvarla nel mi log.
    Codice PHP:
    foreach($array_csv as $numero_riga => $valori){
      try {
     
    $idcliv $valori[0];
     
    $codice $valori[1];
     
    $ragione_sociale $valori[2];
     
    $indirizzo $valori[3];
     
    $cap $valori[4];
     
    $localita $valori[5];
     
    $provincia $valori[6];
     
    $telefono $valori[7];
     
    $mail $valori[8];
     
    $cod_fisc $valori[9];
     
    $p_iva $valori[10];
     
    $codice_agente $valori[11];
     
    $etichetta $valori[12];
     
    $idpag $valori[13];
     
    $pagamento $valori[14];
     
    $ids $valori[15];
     
    $qwt ="UPDATE clienti SET id=?,codice=?,ragione_sociale=?,indirizzo=?,cap=?,localita=?,provincia=?,telefono=?,mail=?,cod_fisc=?,p_iva=?,codice_agente=?,etichetta=?,idpag=?,pagamento=? WHERE idcliente=?";
     
    $result $connessione->prepare($qwt);
     
    $par = array($idcliv$codice$ragione_sociale,$indirizzo,$cap,$localita,$provincia,$telefono,$mail,$cod_fisc,$p_iva,$codice_agente,$etichetta,$idpag,$pagamento,$ids);
    $result->bind_param('iisssssssssisisi'$par[0],$par[1],$par[2], $par[3], $par[4], $par[5],$par[6],$par[7],$par[8],$par[9],$par[10],$par[11],$par[12],$par[13],$par[14],$par[15]);
    $result->execute();

    $operazione SqlDebug($qwt$par);
    $fp fopen("../log/clienti_ins.txt""a");
    if(!
    $fp) die ("Errore nella operaione con il file");
    $data2 date('d')."-".date('m')."-".date('Y'). " " .date('H').":".date('i');
    $chi $_SERVER['REMOTE_ADDR'];
    $dispositivo $_SERVER['HTTP_USER_AGENT'];
    fwrite($fp"\r\n".$data2." - " $chi ." - "$operazione" - " .$dispositivo);
    fclose($fp);

    }catch (
    Exception $e) {
        echo 
    'Caught exception: ',  $e->getMessage(), "\n";
    }
     
     

    Grazie mille

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    443
    Metti questo prima della connessione al db:
    codice:
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    In questo modo gli errori di mysqli verranno generati come eccezioni e potrai gestirli con i try catch.

    Inoltre per la gestione dei log ti consiglio di utilizzare una libreria già pronta (monolog per esempio) così da semplificarti molto quella parte e non doverti sbattere per creare qualcosa che esiste già (a meno che il tuo non sia un esercizio di scrittura di codice, in quel caso fai bene a provare a farlo a mano).

Tag per questa discussione

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