2012-02-22 20 views
17

Estoy tratando de obtener el número de filas afectadas en una simple consulta de actualización de MySQL. Sin embargo, cuando ejecuto este código a continuación, PHP mysql_affected_rows() siempre es igual a 0. No importa si foo = 1 ya (en cuyo caso la función debería correctamente devolver 0, ya que no se cambiaron filas), o si foo actualmente es igual a algunos otro entero (en cuyo caso la función debería devolver 1).mysql_affected_rows() devuelve 0 para la instrucción UPDATE, incluso cuando realmente ocurre una actualización

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 
mysql_query($updateQuery); 
if (mysql_affected_rows() > 0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; // always prints not affected 
} 

La instrucción UPDATE sí funciona. La INT se cambia en mi base de datos. También he verificado dos veces que la conexión a la base de datos no se está cerrando de antemano ni nada raro. Tenga en cuenta que mysql_affected_rows no requiere necesariamente que pase un identificador de enlace de conexión, aunque también lo he intentado.

detalles sobre la función: mysql_affected_rows

alguna idea?

+1

está usted seguro de que el registro se actualiza? Asegúrese de configurar foo igual a algo que no sea 1 antes de ejecutar la prueba. – northpole

+3

Por casualidad, ¿podría llamarse su página dos veces, tal vez debido a una regla de reescritura? Esto haría que los datos se actualicen la primera vez, y luego no la segunda vez cuando vea el resultado final ... No estaría de más comprobar los registros de su servidor web. –

+0

¿Ha confirmado que en realidad está devolviendo 0 y no tiene un valor negativo? – Jodaka

Respuesta

-1

Was My Tought!

¡Estaba a punto de decir que compruebe si la función ha sido llamada muchas veces!

Sólo un pequeño consejo:

intente utilizar isset() & de POST/GET o algo por el estilo;

if (isset($_POST['Update'] == 'yes')) : 

// your code goes here ... 

endif; 

espero que era clara y útil, Ciao :)

+1

No puede usar isset() en el resultado de una expresión. – Cedric

0

Intente conectar de esta manera:

$connection = mysql_connect(...,...,...); 

y luego llamar como esto

if(mysql_affected_rows($connection) > 0) 
    echo "affected"; 
} else { ... 
0

Creo que se necesita para intenta algo más en la actualización luego foo = 1. Pon algo totalmente diferente de lo que verás si se está actualizando o no sin if loop. luego, si lo hace, tu ciclo if debería funcionar.

0

¿Funciona esto?

$timestamp=mktime(); 
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2"; 
mysql_query($updateQuery); 

$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}"; 
$res=mysql_query($updateQuery); 
$row=mysql_fetch_row($res); 
if ($row[0]>0) { 
    echo "affected!"; 
} 
else { 
    echo "not affected"; 
} 
19

más recientes de MySQL son lo suficientemente inteligente como para ver si la modificación se lleva a cabo o no. Digamos que dispararon hasta una instrucción de actualización:

UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234 

permite decir si el valor de la columna ya es 1; entonces no ocurre ningún proceso de actualización, por lo tanto mysql_affected_rows() devolverá 0; de lo contrario, si Column lazy tiene algún otro valor en lugar de 1, se devuelve 1. No hay otras posibilidades a excepción de los errores humanos.

+5

+1. No sabía que – asprin

+1

Eso fue todo, lo que me dificultó la vida. Ahora puedo actualizar mi código para evitar esto. – zeeshan

1

mysqli_affected_rows requiere que pase la referencia a su conexión de base de datos como el único parámetro, en lugar de la referencia a su consulta mysqli. p.ej.

$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname"); 

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2"; 

echo mysqli_affected_rows($dbref); 

NO

echo mysqli_affected_rows($updateQuery); 
0

Las siguientes notas serán útiles para usted,

mysql_affected_rows() devuelve

  • +0: una fila no se ha actualizado o insertados (Probablemente porque la fila ya existía, pero no se cambiaron los valores de campo en realidad durante la actualización).

  • 1: una fila se insertó

  • 2: una fila se actualiza

  • -1: en caso de error.

mysqli affected rows developer notes

Cuestiones relacionadas