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

    Classe SQLite3 gestione errori

    Buon giorno,
    non capisco come usare la gestione degli errori della classe SQLite3.
    Ho scritto un piccolo script per controllare l'esistenza di un database sqlite. Uso la classe SQLite3 per aprire il file.
    Ecco il codice di esempio, molto semplice:
    Codice PHP:
    $nomedb 'prova';

    $db = new SQLite3;
    $db->open($nomedbSQLITE3_OPEN_READONLY//Restituirà un errore se il db non esiste
    echo $db->lastErrorMsg(); //restituisce il messaggio di errore 
    Premesso che il db non esiste. Lo script deve restituire un messaggio di errore che dovrebbe essere memorizzato in $db->lastErrorMsg().
    Lo script però restituisce l'errore: Fatal Unhandled Exception....
    Questo perchè non ho inizializzato istanze della classe Exception per gestire gli errori.

    Nella documentazione della classe è specificato che in caso di errore viene generata un'eccezione, ma non è già gestita dai metodi lastErrorMsg() e lastErrorCode() ?

    Forse non ho capito come usare correttamente la classe SQLite3.. ma mi consolo perchè in caso di errore anche gran parte degli script di esempio che si trovano in rete non prevedono la gestione delle eccezioni sugli errori.

    Come si usano i metodi lastErrorMsg() e lastErrorCode()?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Non ho mai usato questa classe, ma ad intuito ti dico che lastErrorMsg() e lastErrorCode() non gestiscono niente, semplicemente leggono il contenuto di una variabile e ne stampano il contenuto.

    Le eccezioni vanno gestire con l'uso del costrutto try/catch.

  3. #3
    Quindi devo per forza fare un costrutto try / catch usando la classe exception.
    La documentazione della funzione è questa, ma è scarna: http://it2.php.net/manual/it/sqlite3.lasterrormsg.php
    Non si capisce dunque a cosa servano i metodi per la gestione dell'errore lastErrorMsg() e lastErrorCode().

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Non sono metodi per la gestione degli errori, ma solo 2 funzioni che ti dicono quale è stato l'ultimo errore riscontrato.
    Returns English text describing the most recent failed SQLite request
    Dov'è che dice che gestisce un errore?

  5. #5
    Questo codice parzialmente funziona:
    Codice PHP:
    try {
    $db = new SQLite3($dbname,SQLITE3_OPEN_READONLY); // Crea il database 
    }
    catch (
    Exception $err){
     echo 
    $err->getMessage();
     echo 
    '<br>';
     echo 
    $err->getCode();
     echo 
    '<br>';
     echo 
    $db->lastErrorCode();

    L'eccezione viene gestita dalla classe exception e restituitoa video tramite echo $err->getMessage();
    Continua a non funzionare però la riga echo $db->lastErrorCode();
    Restituisce l'errore di Variabile $db non definita e naturalmente Call to a member function lastErrorCode() on a non-object

    E' come se l'oggetto $db venisse creato e successivamente al fallimento del tentativo di apertura del database inesistente subito eliminato.
    Mi sembra strana come cosa..
    Ultima modifica di W Thunderbird; 01-03-2014 a 17:45

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Questo perché se
    $db = new SQLite3($dbname,SQLITE3_OPEN_READONLY); // Crea il database

    fallisce, in $db non c'è l'oggetto SQLIte dato che appunto la creazione ha fallito.

    echo $db->lastErrorCode();

    lo puoi usare sugli errori generati in seguito, per esempio dopo aver effettuato una query per vedere se restituisce un errore, ma non sulla creazione dell'oggetto stesso.

  7. #7
    Sisi, ci sono arrivato anche io un minuto dopo aver pubblicato il post.
    Putroppo la documentazione non lo fa' capire che i metodi che usavo servono per gli errori generati in seguito.
    Anche se, volendo essere rigorosi, anche la mancata apertura del database richiesto è un'errore che dovrebbe essere riportato ma il meccanismo stesso per cui l'oggetto non viene creato impedisce di riportarlo con un metodo della classe stessa.

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