Foros del Web » Programando para Internet » PHP »

Problema escapando SQL con mysqli->real_escape_string

Estas en el tema de Problema escapando SQL con mysqli->real_escape_string en el foro de PHP en Foros del Web. Hola de nuevo (casi 10 años desde mi último post Tengo un problema escapando variables de MYSQL, que por miro no resuelvo, y es un ...
  #1 (permalink)  
Antiguo 03/06/2013, 16:05
 
Fecha de Ingreso: mayo-2003
Ubicación: Cantabria
Mensajes: 20
Antigüedad: 20 años, 11 meses
Puntos: 0
Problema escapando SQL con mysqli->real_escape_string

Hola de nuevo (casi 10 años desde mi último post

Tengo un problema escapando variables de MYSQL, que por miro no resuelvo, y es un error escapando cadenas.

Cadena que le paso (por POST).
espa' fasjkds\'' aksfaksd\' s3

Cadena que obtengo por MYSQL
Escapada: espa\' fasjkds\\\'\' aksfaksd\\\' s3

Evidentemente al haber un \\' el MYSQL me suelta un error de sintaxis incorrecta.

El código para escapar es:
$escapada = $this->mysqli[$user_mode]->real_escape_string($valor);
Dónde $mysqli[$user_mode] es el objeto de la base de datos.

El Magic quotes aunque no está desactivado en el servidor, ya está suplido con una función y está comprobado que la variable es la indicada arriba.

¿Por dónde van los tiros y porque no puedo escapar correctamente mi variable para hacer un INSERT?

El SQL que falla es:
UPDATE `tabla` SET `nombre` = 'espa\' fasjkds\\'\' aksfaksd\\' s3', `descripcion` = 'descripcion spa' WHERE idioma = 'es' LIMIT 1;
  #2 (permalink)  
Antiguo 03/06/2013, 16:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema escapando SQL con mysqli->real_escape_string

Si estas usando MySQLi, es mucho mejor que uses Stored Procedures para evitar todo este problema de las comillas, y así tienes mucha más seguridad.

Saludos.
  #3 (permalink)  
Antiguo 03/06/2013, 19:52
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Problema escapando SQL con mysqli->real_escape_string

yo creía que en mysqli update no se puede usar LIMIT 1;
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 04/06/2013, 04:50
 
Fecha de Ingreso: mayo-2003
Ubicación: Cantabria
Mensajes: 20
Antigüedad: 20 años, 11 meses
Puntos: 0
Respuesta: Problema escapando SQL con mysqli->real_escape_string

Hola.

He mirado lo del procedimiento almacenado y realmente veo que es como un lenguaje de programación, vamos que requiere unos cuantos días o semanas de aprendizaje y yo ya tengo mi proyecto comenzado, a parte de que hoy por hoy no es la solución que busco.

Respecto al Update, en principio cualquier WHERE que yo sepa puede tener LIMIT 1, aunque el problema no viene por ahí.

El problema sigue en el escapado de mysqli, que o falla o no lo estoy llamando adecuadamente.
  #5 (permalink)  
Antiguo 05/06/2013, 14:25
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Problema escapando SQL con mysqli->real_escape_string

Cita:
espa\' fasjkds\\\'\' aksfaksd\\\' s3
mi pregunta es por que te aparecen esas dos \\ extras en el código...

Código PHP:
Ver original
  1. <?php
  2. function search_escape($str, $char = '\\')
  3. {
  4.     return ereg_replace('[%_]', $char . '\0', $str);
  5. }
  6. ?>
has tratado??
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #6 (permalink)  
Antiguo 05/06/2013, 14:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema escapando SQL con mysqli->real_escape_string

Para nada es un lenguaje de programación, simplemente pasas placeholders y ya:
Código PHP:
Ver original
  1. $stmt = $mysqli->prepare("INSERT INTO foo VALUES(?, ?, ?)");
  2. $stmt->bind_param('sss', $foo, $bar, $baz);
  3. $foo = 'algo"asdasd';
  4. $bar = "otra cosa con '''342\"asda";
  5. $baz = 14;
  6. $stmt->execute();

y listo no hay ciencia...

Etiquetas: mysql, sql, tabla, variables
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 19:10.