4,395
edits
No edit summary |
|||
| Line 62: | Line 62: | ||
A día de hoy, muy pocas funciones cumplen este standard, pero es necesario. | A día de hoy, muy pocas funciones cumplen este standard, pero es necesario. | ||
== | == Normas SQL == | ||
* | * ¡Los SELECT * están prohibidos! Cada Select deberá especificar la lista completa de los campos para recuperar. Esto permitirá evitar confusiones. Ejemplo: | ||
<pre> | <pre> | ||
SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = '$id' | SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = '$id' | ||
</pre> | </pre> | ||
* | * En las consultas SQL, entrecomillaremos los campos, pero no los numéricos que contengan cantidades que se almacenen en los campos de tipo double o real. Los entrecomillados en los numéricos de tipo float se almacenan con un valor diferente. Por ejemplo 412.62 dentro del insert se guardara con el valor 412.61999512 en base si el campo es de tipo double(24,8). Y PHP sólo ve 412.61999512. Otras herramientas verán 412.62 dando la impresión de que no hay problemas. Y PHP tiene razón, hay un problema en base. Mediante la eliminación de las comillas en los numéricos, esto irá mejor. | ||
Ejemplo: | |||
<pre> | <pre> | ||
Bien: INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', 412.62) | |||
Mal: INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', '412.62') | |||
</pre> | </pre> | ||
Nota, el problema de los float es general y no sólamete en el acceso a la base de datos, está presente en todos los lenguajes cuando trabajamos sobre números reales, por lo que deberán ser limpiados por la función price2num con el segundo parámetro rellenado con: | |||
'MU', 'MT' | 'MU', 'MT' ó 'MS' según sea necesario. (véase la doc de la función) | ||
* Dolibarr | * Dolibarr debe trabajar incluso con la opción '''strict''' de Mysql activa. | ||
* | * las funciones NOW ó SYSDATE están prohibidas en las órdenes de SQL. Si se necesita indicar la fecha del momento en un campo, el valor debe provenir de PHP y no del motor de la base de datos. Esto además de ofrecer una mejor portabilidad del código, también permite una gestión correcta de la zona horaria. | ||
== Normes HTML == | == Normes HTML == | ||