2009-09-28 17 views

Respuesta

3
+5

Esto podría devolver 0 si los datos actualizados en la consulta son los mismos que ya están en la base de datos, por lo que puede devolver 0 incluso si la consulta fue exitosa pero se cambiaron 0 filas. Pero supongo que su caso de uso no tendrá este escenario. – andho

+0

Esto puede aplicarse, pero si tal vez escribió "$ query = mysql_query ($ sql);", entonces "$ query" contendría un "1" si fuera exitoso, de otro modo "0". – NessDan

0

si su consulta de actualización se encuentra en una variable llamada $ consulta, puede hacerlo;

$result = mysql_query($query); 
if($result){ 
    //succes! 
} else { 
    //fail! 
} 

Espero que esto ayude. Si solo quiere saber si su consulta se ejecutó con éxito, esto servirá. Si realmente desea saber cuántas filas se ven afectadas, use las otras sugerencias.

+2

Esto solo devolverá 'false' si la consulta está mal formada. Incluso si el 'UPDATE' opera en cero filas, esto mostrará" ¡éxito! " – brianreavis

+0

Esto solo indicará si la consulta se ejecutó correctamente, no cuántas filas se vieron afectadas. –

7

Realmente no hay forma de saberlo. Digamos que la tabla tbl_numbers (id, value) tiene filas (1, "uno") y (2, "dos");

$result1="update tbl_numbers set value='first' where id=1"; 

Si marca $ resultado1 en si la cláusula devuelve verdadero y mysql_affected_rows() devuelve 1.

Sin embargo, para $result2="update tbl_numbers set value='two' where id=2"; Si marca $ result2 en si la cláusula devuelve verdadero y mysql_affected_rows() devuelve 0.

y, por $result3="update tbl_numbers set value='three' where id=3"; Si marca $ result3 en si la cláusula devuelve verdadero y mysql_affected_rows() devuelve 0.

+0

Esto es útil. Gracias – hriziya

2

¿y qué si el usuario vuelve a enviar datos que ya son los mismos que la información en el DB? Si la memoria sirve eso devolvería mysql_affected_rows() con un valor de 0 porque por definición no se actualizaron filas en el proceso. Sin embargo, la consulta en sí misma fue exitosa.

La solución a esto sería ya sea a prueba su contenido antes de la inserción o usando:

$result = mysql_query($q); 
if(mysql_affected_rows() == 0) 
    $state = $result ? "Success" : "Fail"; 

esta manera se llega a comprobar si se han actualizado las filas y si no se puede comprobar si se trataba de un mal funcionamiento o solo repita datos.

+0

4 resultados posibles: mal funcionamiento, actualización de datos, repetición de datos o clave no encontrada. Desafortunadamente, la verificación de errores no lo ayudará a distinguir entre la clave no encontrada y la repetición de datos. –

0

Llego bastante tarde aquí, pero siempre puedes forzar una falla en ninguna coincidencia si cambias tu consulta.

Para la tabla 'foo' con columnas 'ID' y 'valor'. expresión de coincidencia: ID = 4

update foo 
join (select ID as nearID, 
ID = 4 
as matched from foo order by matched desc limit 0, 1) as t on nearID = ID 
set value='somedata2'  
, ID = if(matched, nearID, 'nomatch') 

Es probable que sea más fácil sólo para cambiar la tabla para incluir ya sea una marca de tiempo o número de secuencia de actualización lugar sin embargo. (ya que esos cambiarían en cada actualización)

0

Si se utiliza PDO, filas afectadas se pueden obtener usando rowCount() función de la siguiente manera:

/* Delete all rows from the FRUIT table */ 
$del = $dbh->prepare('DELETE FROM fruit'); 
$del->execute(); 

/* Return number of rows that were deleted */ 
print("Return number of rows that were deleted:\n"); 
$count = $del->rowCount(); 
print("Deleted $count rows.\n"); 
0

Si está utilizando declaración preparada ..

//query 
$stmt = $conn->prepare("UPDATE user SET name = 'Jack' WHERE id = ?"); 

//bind parameters 
$stmt->bind_param("i", $id); 

//execute 
$stmt->execute(); 

//updated row count 
echo $stmt->affected_rows; 
echo " rows updated"; 
Cuestiones relacionadas