2009-05-28 23 views
44

Usando PHP, estoy tratando de eliminar un registro, pero quiero verificar si fue exitoso o no. ¿Se devolvió algo de un DELETE FROM foo where bar = 'stuff' exitoso?¿Qué devuelve un MySQL DELETE exitoso? ¿Cómo verificar si DELETE fue exitoso?

Como alternativa, ¿conoce alguna otra forma de verificar si un DELETE fue exitoso? ¿O será mejor que me asegure de que la fila exista antes de eliminarla? Estoy tratando de evitar otra consulta si es posible.

Respuesta

53

Suponiendo que está usando mysql_query:

Para otro tipo de sentencias SQL, INSERT, UPDATE, DELETE , DROP, etc, mysql_query() devuelve TRUE en caso de éxito o FALSE en caso de error.

Si está utilizando PDO::exec, a continuación, el manual dice esto:

PDO :: exec() devuelve el número de filas que fueron modificados o eliminados por la sentencia SQL ha emitido. Si no se vieron afectados filas, PDO :: exec() devuelve 0.

no desea responder snipe, pero ya que este fue seleccionado como la respuesta, hay que señalar que mysql_query volverá TRUE incluso si la consulta en realidad no eliminó nada. Debe usar mysql_affected_rows para verificar eso.

+4

"No quiero responder snipe" Oh, no! ¡No son mis preciosos y preciosos puntos! =) – biggusjimmus

+0

+1 para mysql_affected_rows –

+1

Si está utilizando PDO :: execute() para obtener el número de filas afectadas, debe usar PDO :: rowCount() – Alan

32

Además, si usted se preocupa por el número de filas que se vieron afectados:

[Uso] mysql_affected_rows() para averiguar cuántas filas se vieron afectados por un DELETE, INSERT, REPLACE, o UPDATE.

+2

¡Gánate! Comprobar que esto es> 0 es útil, ya que mysql_query() devolverá TRUE si la consulta se formó correctamente pero no eliminó nada. – ceejayoz

+0

@ceejayoz ¿Podría aclarar que no eliminó nada porque no había nada que eliminar o debido a algún error? – MaxZoom

+0

@MaxZoom Si hay un error, 'mysql_query' devolverá' FALSE'. Si no hay nada que eliminar, 'mysql_query' devolverá' TRUE' y 'mysql_affected_rows' sería' 0'. Dicho esto, ya no deberías usar 'mysql_query' ** en absoluto **. – ceejayoz

13

podría intentar esto para su código php, colocado después de la consulta se ejecuta:

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>"; 
} 
Cuestiones relacionadas