Foros del Web » Programando para Internet » PHP »

No puedo guardar los datos escapados en MySQL

Estas en el tema de No puedo guardar los datos escapados en MySQL en el foro de PHP en Foros del Web. Hola. Estoy tratando de guardar los datos escapados en la base de datos pero pese a que uso mysqli_real_escape_string(), los datos como \n, \r, \, ...
  #1 (permalink)  
Antiguo 03/08/2014, 09:19
 
Fecha de Ingreso: enero-2010
Mensajes: 128
Antigüedad: 14 años, 3 meses
Puntos: 2
No puedo guardar los datos escapados en MySQL

Hola.

Estoy tratando de guardar los datos escapados en la base de datos pero pese a que uso mysqli_real_escape_string(), los datos como \n, \r, \, ' se guardan en la base


Ejemplo: $_POST ['nombre'] = "pr'ueb\ra"

mysqli_real_escape_string($_POST ['nombre']); //Rdo esperado: pr\'ueb\\ra

Hice varias pruebas pero ninguna funciona:
Código:
$query = sprintf("INSERT INTO usuarios (us_nom, us_ape, us_nivel, us_nick, us_pass) VALUES ('%s', '%s', '%s', '%s', '%s')", mysqli_real_escape_string($laConexion, $_POST['nombre']), mysqli_real_escape_string($laConexion, $_POST['apellido']),
 '10', 
mysqli_real_escape_string($laConexion, $_POST['nick']), mysqli_real_escape_string($laConexion, $_POST['pass']));
Código:
$nom = mysqli_real_escape_string($laConexion, $_POST['nombre']);
$query = "INSERT INTO usuarios (us_nom, us_ape, us_nivel, us_nick, us_pass) VALUES ('$nom', '{$_POST['apellido']}', '10', '{$_POST['nick']}', '{$_POST['pass']}')";
En todos los casos las variables se escapan pero se guardan sin escapar en la base de datos.

¿alguna idea?¿qué estoy haciendo mal?

Gracias.
__________________
Por favor evitar comentarios del estilo "leer el manual...", ya lo hice pero aun tengo dudas, por eso pregunto acá
  #2 (permalink)  
Antiguo 03/08/2014, 09:55
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: No puedo guardar los datos escapados en MySQL

tenes que primero parsear el dato y despues guardarlo:

Código PHP:
Ver original
  1. <?
  2. function prepareTextInput($text)
  3.     {
  4.         return trim(htmlentities(str_replace(array('\"','\\\''),array('"',"'"),$text), ENT_QUOTES, "UTF-8", true));
  5.     }
  6.     function prepareTextOutput($text){
  7.         //return str_replace("\n","<br />",html_entity_decode($text, ENT_NOQUOTES, 'UTF-8'));
  8.         return html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
  9.     }
  10. ?>
  #3 (permalink)  
Antiguo 03/08/2014, 17:33
 
Fecha de Ingreso: enero-2010
Mensajes: 128
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: No puedo guardar los datos escapados en MySQL

Pero justamente mysqli_real_escape_string() cumple la funcion de escapar los valores.

Tu funcion transforma algunos caracteres en su correspondencia de HTML.

Yo quiero escapar los valores, guardarlos en la base de datos y asi evitar las inyecciones SQL

Ejemplo: $_POST ['nombre'] = "pr'ueb\ra"

mysqli_real_escape_string($_POST ['nombre']); //Rdo esperado: pr\'ueb\\ra

Saludos.-
__________________
Por favor evitar comentarios del estilo "leer el manual...", ya lo hice pero aun tengo dudas, por eso pregunto acá
  #4 (permalink)  
Antiguo 03/08/2014, 18:04
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: No puedo guardar los datos escapados en MySQL

las podes combinar

para mi lo mejor es usar PDO, tiene muchisima mas seguridad que mysqli_real_escape_string
  #5 (permalink)  
Antiguo 03/08/2014, 18:10
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: No puedo guardar los datos escapados en MySQL

mysqli también cuenta con consultas preparadas que te verifican el tipo de dato y te escapan las cadenas cuando es necesario hacerlo, ve un poco de esto y lo más seguro es que te ayude, aunque en lo personal también prefiero PDO, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: mysql, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:47.