update mysql me guarda 4294967295
Bienvenidos a VerTutoriales, en esta ocasión vamos a darle solución a un problema que aparentemente no tiene lógica… Al realizar una consulta de actualización de un campo donde quería realizar un decremento, el valor devuelto en vez de ser de valor = valor – 1, este me daba como resultado 4294967295.
La consulta en cuestión era la siguiente:
“UPDATE productos set existencias = existencias-“.intval($dato[‘2’]).” where ref = ‘”.$dato[‘0’].”‘”
Curiosamente aunque la consulta está con la sintaxis correcta en algunas ocasiones me devolvía el valor máximo del entero existencias 4294967295. Esto al parecer ocurre cuando en nuestra base de datos de MySQL tenemos puesto el atributo unsigned para nuestro entero, diciendo este parámetro que el valor a guardar ha de ser cero o positivo. En mi caso cuando las existencias se quedaban a 0, puesto que no podía ser menor de 0 tambien me devolvía este valor. Así que sin mucho sentido cambié el valor del atributo unsigned y lo dejé en blanco y sin más problema el decremento empezó a funcionar correctamente.
Espero que os sirva a los que busquen solución a este problema y si alguien puede aportar alguna información adicional será bienvenida.
Un saludo!
—– NOTA —–
Revisando el código, resulta que el decremento era de -2, por eso al pasar de 0 a -1 me guardaba el 4294967295 famoso del integer. Sea como fuere, el problema es que para guardar negativos con un valor entero ha de ser por el parámetro unsigned.
Comments
Muchas gracias por su solución, he estado días testeando este error en mi tienda y al final buscando el valor máximo del entero llegue a este post y encontré la dichosa solución. Me había puesto un if con alertas cuando pasaba este caso y todo MUCHAS GRACIAS!!!!!!!!!!!!!!!!!!!!!!!!
Muchas denadas, precisamente cuando me encontré con el problema del entero 4294967295 buscaba el valor, pero solo me aparecía como que es el valor entero máximo que puede ser guardado por el tipo, pero no encontré nada al respecto del signo, si es positivo o negativo, vamos, que si es unsigned e intentabas actualizar con update -1 devolvía el valor máximo. Por eso me animé a compartirlo, para que otros no se compliquen.
Es raro que quieras actualizar y si proboca un “error” te ponga el valor máximo, creo que eso es lo que nos ha despitado a más de uno ya jeje.
Un saludo!