Pregunta

Tengo un montón de $ _POST variables que están siendo enviados a través de una forma larga y dura en lugar de codificar cada uno con un mysql_escape_string() ¿Está bien para mí hacer lo siguiente? No sé si esto es realmente seguro y / o código viable.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

Estoy bastante seguro de que, debido a que estoy usando la Y, que está pasando en modo de referencia, no el valor, así que estoy realmente cambiar el valor en el $ _POST.

Además, debería utilizar mysql_real_escape_string() lugar?

EDIT: estoy usando PDO y preparo () junto con el método anterior. ¿Esto cuidar de él para mí?

¿Fue útil?

Solución

¿Por qué no usar array_map()?

array_map(mysql_real_escape_string, $_POST);

Pero, en realidad, usted debe utilizar declaraciones parametrizados / preparado.

mysql_real_escape_string() toma el carácter de base de datos actual establecido en cuenta, mysql_escape_string() no lo hace. Así que la primera es la mejor alternativa en comparación.

Edit (seguimiento de edición de la OP a la pregunta):

Desde que ya hace DOP prepara declaraciones, no hay necesidad de modificar sus valores. DOP se encarga de todo, eso es todo el punto de que ( Si usted realmente poner todos los datos de parámetros, es decir - sólo concatenación de cadenas para construir sentencias SQL conduce al desastre con DOP o sin ella). Escapar de los valores de antemano llevaría a valores escapado en la base de datos.

Otros consejos

Sí, usted debe utilizar mysql_real_escape_string(), si vas a ir por ese camino. Pero la forma correcta para asegurarse de que las variables son seguros para enviar a la base de datos está utilizando consultas parametrizadas que se proporcionan en PHP a través de cualquiera de los href="http://php.net/mysqli" rel="nofollow noreferrer"> mysqli funciones o DOP .

Además de los comentarios anteriores, otro de los beneficios de utilizar consultas parametrizadas es que la base de datos será capaz de hacer mejor las optimizaciones y probablemente usar un plan de consulta almacenado en caché por lo que obtendrá un mejor rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top