Dato che la modalità di errore più consigliata per PDO è ERRMODE_EXCEPTION
, nessuna execute()
verifica diretta dei risultati funzionerà mai . Poiché l'esecuzione del codice non raggiungerà nemmeno la condizione offerta in altre risposte.
Quindi, ci sono tre possibili scenari per gestire il risultato dell'esecuzione della query in PDO:
- Per raccontare il successo, non è necessaria alcuna verifica. Continua con il flusso del tuo programma.
- Per gestire l'errore imprevisto, mantieni lo stesso: non è necessario alcun codice di gestione immediata. Verrà generata un'eccezione in caso di errore del database e verrà visualizzata in bolla fino al gestore degli errori a livello di sito che alla fine si tradurrà in una pagina di errore 500 comune.
- Per gestire l'errore previsto, come una chiave primaria duplicata, e se hai un determinato scenario per gestire questo particolare errore, utilizza un
try..catch
operatore.
Per un normale utente PHP suona un po 'estraneo - che ne dici, non per verificare il risultato diretto dell'operazione? - ma questo è esattamente il modo in cui funzionano le eccezioni: controlli l'errore da qualche altra parte. Una volta per tutte. Estremamente conveniente.
Quindi, in poche parole: in un codice normale non è necessaria alcuna gestione degli errori. Mantieni il tuo codice così com'è:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
In caso di successo te lo dirà, in caso di errore ti mostrerà la normale pagina di errore che la tua applicazione sta mostrando per tale occasione.
Solo nel caso in cui tu abbia uno scenario di gestione diverso dalla semplice segnalazione dell'errore, metti la tua istruzione insert in un try..catch
operatore, controlla se era l'errore che ti aspettavi e gestiscilo; oppure - se l'errore fosse diverso - rilanciare l'eccezione, per rendere possibile essere gestito dal gestore degli errori a livello di sito nel modo usuale. Di seguito è riportato il codice di esempio dal mio articolo sulla gestione degli errori con PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
Nel codice sopra stiamo controllando che l'errore particolare intraprenda un'azione e rilanciamo l'eccezione per qualsiasi altro errore (nessuna tabella di questo tipo, ad esempio) che verrà segnalato a un programmatore.
Mentre di nuovo - solo per dire a un utente qualcosa come "Il tuo inserimento è andato a buon fine" non è mai necessaria alcuna condizione.