Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/03/2008, 19:13
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Cita:
Iniciado por shock_dude Ver Mensaje
Lo ideal es crear una funcion que haga lo siguiente:

Si las comillas magicas están activadas en tu .php.ini usar mysql_real_escape_string
Si están desactivadas, usar primero add_slashes, y luego mysql_real_escape_string
No es del todo cierto. Más parece que es al revés. Veamos.

Si tienes magic_quotes activados y tienes este código:

Código PHP:
echo $_GET['variable']; 
al llamar al archivo de la forma archivo.php?variable=D'jango, el script imprimirá esto:
Cita:
D\'jango
Ahora, si encima de eso le aplicas el mysql_real_escape_string() tendremos:
Cita:
D\\\'jango
Osea, está escapando la barra invertida que escapa la comilla, y la comilla (otra vez). Por lo tanto, al guardar a la base de datos se guardará de la primera forma, con las barras agregadas.

Lo mismo si magic_quotes están desactivadas. Ese es el modo óptimo. Si usas addslashes es como que estuvierras imitando el comportamiento de magic_quotes, y sucede el mismo caso anterior.

La lógica para este caso sería:
  • magic_quotes activado: Aplicar a la cadena un stripslashes() y luego la función mysql_real_escape_string()
  • magic_quotes desactivado: Aplicar direactamente la función mysql_real_escape_string().
La función "ideal" que mencionas sería en todo caso:

Código PHP:
function mysql_escape($cadena) {
    if(
get_magic_quotes_gpc() != 0) {
        
$cadena stripslashes($cadena);
    }
    return 
mysql_real_escape_string($cadena);

El manual de PHP lo dice:
Cita:
Iniciado por http://www.php.net/mysql_real_escape_string
Note: Si se habilita magic_quotes_gpc, aplique stripslashes() sobre los datos primero. Usar esta función sobre datos que ya han sido escapados los escapará dos veces.
Saludos,