Cita:
Iniciado por shock_dude 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:
Ahora, si encima de eso le aplicas el mysql_real_escape_string() tendremos:
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,