2012-09-07 4 views
5

Duplicar posible:
Php PDO::bindParam data types.. how does it work?PDO: ¿Cuál es el propósito de usar data_type durante el enlace?

decir, por ejemplo, que tengo la siguiente declaración preparada:

$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id'); 

que podría enlazar el parámetro user_id así:

$sth->bindValue(':user_id', $user_id_value); 

Y aún estaría a salvo de las inyecciones de SQL.

Sin embargo, bindValue() también es un parámetro opcional llamado data_type, que le permite establecer un tipo de datos explícito. Ejemplo:

$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT); 

Eso me permite afirmar que user_id será un número entero.

Mi pregunta es: ¿Por qué usar el parámetro data_type en bindValue si está seguro contra las inyecciones de SQL con o sin él? ¿Está ahí para forzar la integridad de los datos? Si está validando sus datos de antemano, ¿necesita preocuparse por su uso? ¿Hay algún otro beneficio al usarlo que no haya pensado?

Respuesta

-1

Básicamente, sí. La aplicación de data_types es algo bueno.

No asuma la protección contra la inyección: hace mucho tiempo vi una publicación en el blog que detallaba la inyección usando el código utf8 para back-ticks y citas y lo que no; que, aunque no se escapó, se evaluó como caracteres únicos y, por lo tanto, permitió la inyección.

Eso no quiere decir que esto no se ha abordado ni estoy diciendo que son vulnerables - sólo decir asumiendo veces no es lo mejor que puede hacer ...

+2

¿Qué parte de la pregunta: ¿No respondes? Todavía no veo ninguna argumentación aparte de "es algo bueno", que no es una explicación técnica en absoluto – zerkms

+0

erm ... preguntaste si está ahí para forzar la integridad del tipo de datos. si no quieres usarlo, no. Lo uso porque me gusta esa capa adicional de aplicación. - cada pequeño ayuda [como dicen los usuarios de meth] –

+1

No soy un OP. Pero aún así, "porque me gusta esa capa adicional de cumplimiento", no es una explicación técnica. ¿Puedes dar algún ejemplo en el que esa capa adicional de aplicación pueda ser realmente útil, y hay diferencia con y sin especificación de tipo explícita? – zerkms

Cuestiones relacionadas