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 originalSupongamos este caso:
SELECT A, B, C
FROM tabla
WHERE camponumerico = '$id';
Si $id llega vcío, la sentencia quedaría así:
Código SQL:
Ver originalSELECT A, B, C
FROM tabla
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 originalSELECT A, B, C
FROM tabla
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 originalSELECT A, B, C
FROM tabla
WHERE camponumerico = $id;
MySQL recibirá esto:
Código SQL:
Ver originalSELECT A, B, C
FROM tabla
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.