Me imagino que
GetSQLValueString() es una función que sirve para sanitizar las entradas.
Al no usarla para el
INSERT INTO cotizacion_detail dejás esa parte vulnerable a inyecciones SQL.
Si en el formulario ingresases números, lo que le llega a MySQL es lo siguiente:
Que es totalmente válido, en MySQL los integers no necesitan encerrarse entre comillas. Si descripcion fuese alfanumérica, llegaría
Como no se puede dejar un literal sin comillas, no lo interpreta como un valor, sino como una columna de otro resultset (por si trabajases con
SELECT anidados o uniones).
La respuesta es encerrar las variables con comillas simples en el código, pero esto sigue dejando el script vulnerable a inyecciones SQL, así que también las tendrías que pasar por tu función de sanitización.
Podrías considerar usar alguna capa de abstracción como PDO, que se encarga de ayudarte a preparar las consultas.
http://web2development.blogspot.com/2007/04/accesando-nuestra-base-de-datos-con-pdo.html
Para que entiendas mejor, acá te doy un ejemplo. Primero intento insertar
foo sin comillas, y luego con
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
ERROR
1054 (42S22
): Unknown
column 'foo' in 'field list'
Query OK, 1 row affected (0.00 sec)
+-------+
| campo |
+-------+
| foo |
+-------+
Si el valor fuese numérico, funcionaría de ambas maneras
Código MySQL:
Ver originalQuery OK, 1 row affected (0.00 sec)
+-------+
| campo |
+-------+
| 1 |
+-------+
Query OK, 1 row affected (0.00 sec)
+-------+
| campo |
+-------+
| 1 |
| 7 |
+-------+
Incluso si el tipo de datos fuese numérico, se le podría pasar un número en formato literal y MySQL lo convertiría al vuelo en numérico ('5' no es un número, es una letra; 5 si es un número)
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
+-------+---------+------+-----+---------+-------+
+-------+---------+------+-----+---------+-------+
| campo
| int(11) | YES
| | NULL | | +-------+---------+------+-----+---------+-------+
Query OK, 1 row affected (0.00 sec)
+-------+
| campo |
+-------+
| 3 |
+-------+
Query OK, 1 row affected (0.00 sec)
+-------+
| campo |
+-------+
| 3 |
| 5 |
+-------+