update una saber mysqli_query mysqli_num_rows mysqli_affected_rows mysql_affected_rows ejemplos ejemplo ejecuto consulta php mysql

php - saber - mysql_affected_rows() devuelve 0 para la instrucción UPDATE incluso cuando realmente ocurre una actualización



saber si se ejecuto una consulta en php (9)

¿Has intentado usar la función MySQL ROW_COUNT directamente?

mysql_query(''UPDATE myTable SET foo = 1 WHERE bar = 2''); if(mysql_result(mysql_query(''SELECT ROW_COUNT()''), 0, 0)) { print "updated"; } else { print "no updates made"; }

Para obtener más información sobre el uso de ROW_COUNT y otras funciones de información de MySQL, ROW_COUNT : http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

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

$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 en sí funciona. El INT se cambia en mi base de datos. También he verificado dos veces que la conexión de la base de datos no se está cerrando de antemano o que sea algo raro. Tenga en cuenta que mysql_affected_rows no necesariamente requiere que pase un identificador de enlace de conexión, aunque también lo he intentado.

Detalles sobre la función: mysql_affected_rows

¿Algunas ideas?


¿Trabajas 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"; }


Creo que necesitas probar algo más en la actualización, entonces foo = 1. Poner algo totalmente diferente, entonces verás si se está actualizando o no sin el bucle if. entonces si lo hace, su bucle if debería funcionar.


Esto se debe a que mySql está verificando si el campo realizó algún cambio o no. Para superar esto, creé un nuevo campo TINY ''DIDUPDATE'' en la tabla.

agregó esto a su consulta ''DIDUPDATE = DIDUPDATE * -1''

parece que.

$updateQuery = "UPDATE myTable SET foo=1, DIDUPDATE=DIDUPDATE*-1 WHERE bar=2"; mysql_query($updateQuery); if (mysql_affected_rows() > 0) { echo "affected!"; } else { echo "not affected"; }

¡¡¡funciona bien!!!


Fue mi esfuerzo

¡Estaba a punto de decírtelo para comprobar si se llama a la función muchas veces!

Sólo un pequeño consejo:

intente usar isset () & POST / GET o algo así;

if ( isset( $_POST[''Update''] == ''yes'' ) ) : // your code goes here ... endif;

Espero que haya sido claro y útil, Ciao :)


Intenta conectarte así:

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

y luego llamar así

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


Las siguientes notas serán útiles para usted,

mysql_affected_rows () devuelve

  • +0: ​​una fila no se actualizó o insertó (probablemente porque la fila ya existía, pero ningún valor de campo se cambió realmente durante la ACTUALIZACIÓN).

  • +1: se insertó una fila

  • +2: se actualizó una fila

  • -1: en caso de error.

mysqli filas afectadas notas del desarrollador


Las versiones más recientes de MySQL son lo suficientemente inteligentes como para ver si la modificación se realiza o no. Digamos que activó una declaración de ACTUALIZACIÓN:

UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234

Digamos si el valor de la columna ya es 1; entonces no se produce ningún proceso de actualización, por lo que mysql_affected_rows () devolverá 0; de lo contrario, si la columna floja tenía algún otro valor en lugar de 1, se devuelve 1. No hay otras posibilidades excepto errores humanos.


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 de mysqli. p.ej.

$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname"); $updateQuery = mysqli_query($dbref,"UPDATE myTable SET foo=1 WHERE bar=2"); echo mysqli_affected_rows($dbref);

NO

echo mysqli_affected_rows($updateQuery);