2009-05-28 15 views
44

Utilizzando PHP, sto tentando di eliminare un record, ma voglio verificare se ha avuto successo o meno. Qualcosa è tornato da un successo DELETE FROM foo where bar = 'stuff'?Cosa restituisce un DELETE MySQL di successo? Come verificare se DELETE ha avuto successo?

In alternativa, si conosce qualche altro modo per verificare se un CANC è stato eseguito correttamente? O sto meglio solo assicurandomi che la riga esista prima che la elimini? Sto cercando di evitare un'altra query, se possibile.

risposta

53

Supponendo che si sta utilizzando mysql_query:

Per altri tipi di istruzioni SQL, INSERT, UPDATE, DELETE , DROP, ecc, mysql_query() restituisce TRUE in caso di successo, FALSE in caso di errore.

Se si utilizza PDO::exec, quindi il manuale dice questo: exec

DOP ::() restituisce il numero di righe che sono stati modificati o cancellati dalla dichiarazione di SQL si rilasciato. Se nessuna riga sono stati colpiti, PDO :: exec() restituisce 0.

non si vuole rispondere snipe, ma dal momento che questo è stato scelto come la risposta, Vorrei sottolineare che mysql_query restituirà TRUE anche se la query in realtà non ha rimosso nulla. Dovresti usare mysql_affected_rows per verificarlo.

+4

"Non voglio rispondere a snipe" Oh no! Non i miei preziosi e preziosi punti! =) – biggusjimmus

+0

+1 per mysql_affected_rows –

+1

Se si utilizza PDO :: execute() per ottenere il numero di righe interessate, è necessario utilizzare PDO :: rowCount() – Alan

32

Inoltre, se vi preoccupate per il numero di righe che sono stati colpiti:

[Usa] mysql_affected_rows() per scoprire quante righe sono state colpite da una DELETE, INSERT, REPLACE o UPDATE.

+2

Picchiami! Verificare che questo sia> 0 è utile, poiché mysql_query() restituirà TRUE se la query è stata formata correttamente ma non ha eliminato nulla. – ceejayoz

+0

@ceejayoz Potresti chiarire che non ha cancellato nulla perché non c'era nulla da eliminare o a causa di qualche errore? – MaxZoom

+0

@MaxZoom Se c'è un errore, 'mysql_query' restituirà' FALSE'. Se non c'è nulla da eliminare, 'mysql_query' restituirà' TRUE' e 'mysql_affected_rows' sarebbe' 0'. Detto questo, non dovresti più usare 'mysql_query' ** affatto **. – ceejayoz

13

si potrebbe provare questo per il vostro codice php, posto dopo la query viene eseguito:

if (mysql_affected_rows() > 0) { 
    echo "You have successfully updated your data.<br><br>"; 
} 
else { 
    echo "The data you submitted matched the current data so nothing was changed.<br><br>"; 
} 
Problemi correlati