Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/02/2014, 07:54
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error al usar UPDATE par modificar una bd

Cita:
he vuelto a entrecomillar tanto en set como en where y funciona, creo recordar que funciona con comillas en uno sólo de los términos deotras ocasiones, pero es mejor la regla de entrcomillar en los dos pues es más simple y no tienes que recordar cuales cual.
En realidad desde PHP no puedes ver la diferencia, pero hay algunas distinciones a tener en cuenta:
- Si comparas un campo numérico con una cadena, o una cadena con un campo numérico, obligas a MySQL a realizar una conversión implícita entre tipos de dato, lo que a la larga se paga con performance.
- Poner entre apóstrofes un valor que debe recibirse como número esconde errores de programación, porque el dato puede no estar llegando en la variable, pero eso no dispara un error.
Código SQL:
Ver original
  1. Supongamos este caso:
  2. SELECT A, B, C
  3. FROM tabla
  4. WHERE camponumerico = '$id';

Si $id llega vcío, la sentencia quedaría así:
Código SQL:
Ver original
  1. SELECT A, B, C
  2. FROM tabla
  3. WHERE camponumerico = '';
En la conversión del espacio vacío por un número, el valor es cero, por lo que MySQL lo interpretará así:
Código SQL:
Ver original
  1. SELECT A, B, C
  2. FROM tabla
  3. WHERE camponumerico = 0;
lo cual es incorrecto, porque no devolverá datos, pero no porque no los haya, sino porque el valor que tu supones que está llegando, en realidad no está. Como consecuencia puedes llegar a suponer que tienes un error en la base, cuando en realidad tienes un error en el script de PHP, donde no verificas los datos entrantes.
No es lo mismo una cosa que otra...

En cambio, si lo usas así:
Código SQL:
Ver original
  1. SELECT A, B, C
  2. FROM tabla
  3. WHERE camponumerico = $id;

MySQL recibirá esto:
Código SQL:
Ver original
  1. SELECT A, B, C
  2. FROM tabla
  3. WHERE camponumerico = ;
lo cual disparará un error de sintaxis, que rápidamente se puede identificar como fallo de datos entrantes en la variable.

Resumiendo: Si son valores numericos no los pongas entre apostrofos. Te esconderá errores que luego te costará encontrar rápidamente, porque estarás buscando en el lugar equivocado.

Se ponen entre apostrofes las cadenas de texto, las fechas y horas. Los valores numéricos NO.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)