Foros del Web » Programando para Internet » PHP »

¿Como escapar comillas simples para que no generen errores en consulta?

Estas en el tema de ¿Como escapar comillas simples para que no generen errores en consulta? en el foro de PHP en Foros del Web. Buenas, tengo un pequeño pero MUY molesto problema. Tengo un textarea que guarda en la base de datos MySQL todo su contenido, el problema que ...
  #1 (permalink)  
Antiguo 16/01/2014, 09:33
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
¿Como escapar comillas simples para que no generen errores en consulta?

Buenas, tengo un pequeño pero MUY molesto problema. Tengo un textarea que guarda en la base de datos MySQL todo su contenido, el problema que tengo es que si dentro de él uso una comilla simple (') genera error en SQL.

¿Como puedo hacer para "escapar" esta comilla simple pero sin alterar el resultado final en la impresión? Muchas gracias.
  #2 (permalink)  
Antiguo 16/01/2014, 09:41
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Para escapar caracteres en PHP debes de usar la contrabarra \

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 16/01/2014, 09:49
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Hola... Sí, esto lo sé... Te explico el flujo que siguen los datos:

Código Flujo:
Ver original
  1. Textarea --> Action del formulario que procesa el query --> Base de datos
  2.  
  3. Base de datos --> Query llamando los datos --> Impresión de variables

¿Ves? ¿Como los puedo escapar si lo que imprimo es una variable que es traída mediante un array desde la BD? :s
  #4 (permalink)  
Antiguo 16/01/2014, 09:53
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Pues como quieres que adivinemos si no eres especifico

Usa prepare de PDO

ó

Usa mysqli_real_escape_string si usas mysqli

Hay una similar para las funciones de mysql_* pero no la coloco ya que está obsoleta

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 16/01/2014, 09:56
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

¿Y como funciona dicha función para escapar una sola comilla simple? x__x Por lo que veo la función escapa las variables, sí, pero ¿como determino el caracter que deseo? No veo algo como eso en la documentación de PHP...
  #6 (permalink)  
Antiguo 16/01/2014, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Cita:
Iniciado por MeDxEc Ver Mensaje
¿Y como funciona dicha función para escapar una sola comilla simple? x__x Por lo que veo la función escapa las variables, sí, pero ¿como determino el caracter que deseo? No veo algo como eso en la documentación de PHP...


La función se encarga de escapar todos los caracteres que tienen el potencial de generar un error.
Así, por ejemplo, si existiese una contrabarra (\) como aprte del texto, también se la escapa.
En otras palabras: Tu no lo determinas. El analisisi que hace la función lo realiza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/01/2014, 10:00
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Te es familiar el término SQL Inyection? Si no es así te invito a investigar

Cita:
dentro de él uso una comilla simple (') genera error en SQL
Por norma debes de usar si o si las funciones que te indiqué. Igual lo que harán será escapar todos los caracteres que puedan generar conflicto en una consulta SQL, vamos que lo dice el manual

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 16/01/2014, 10:08
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Jajajaja lo siento, es que hay veces que no sé interpretar correctamente el manual y pienso que las cosas son más dificiles de lo que en realidad son x_x Además, como estoy usando aún las funciones de mysql_ y no mysqli a veces me dejo psicosear por el hecho de que esté obsoleto x_x Muchas gracias a los dos :)
  #9 (permalink)  
Antiguo 16/01/2014, 10:13
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Tengo una pequeña duda... ¿Las variables se escapan antes o después del query? Veo en la documentación que las escapan despues del query pero el query del ejemplo es un "SELECT" y el mío es un "INSERT" así que... Siguiendo la lógica diría que ¿para qué voy a escapar variables después de que se ejecuta el query? Lo correcto sería escaparlas antes del INSERT ¿no? Perdón si sueno muy noob x_x

Cabe resaltar que estoy usando la vieja función mysql_real_escape_string() y no la de mysqli o PDO.
  #10 (permalink)  
Antiguo 16/01/2014, 10:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Cita:
Iniciado por MeDxEc Ver Mensaje
Tengo una pequeña duda... ¿Las variables se escapan antes o después del query? Veo en la documentación que las escapan despues del query pero el query del ejemplo es un "SELECT" y el mío es un "INSERT" así que... Siguiendo la lógica diría que ¿para qué voy a escapar variables después de que se ejecuta el query? Lo correcto sería escaparlas antes del INSERT ¿no? Perdón si sueno muy noob x_x

Cabe resaltar que estoy usando la vieja función mysql_real_escape_string() y no la de mysqli o PDO.
Primero: ¿Te importa cómo?
La verdad, no... El cómo hace el escapado es irrelevante.

Segundo: ¿Cuándo?
Buieno, el manual es claro: Se debe aplicar la función a las variables de datos. No a la sentencia.

Tercero: ¿Es diferente hacerlo para SELECT que para INSERT?


NO. Obviamente no. Porque lo que hay que scapar es el contenido de las variables de datos que ingresan, y eso es independiente de la sentencia SQL.
Lo que no debes hacer es aplicar esa función a una variable que contenga una sentencia SQL.
Como mucho, si quieres, debes ponerla aplicada a las variables de datos que le estás incrustando:
Código PHP:
$qry "SELECT .... FROM ... 
WHERE XXX = "
mysql_real_escape_string($variable)." ..."
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/01/2014 a las 10:25
  #11 (permalink)  
Antiguo 16/01/2014, 10:21
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

por favor mira cuidadosamente bien los ejemplos que muestran allí... la verdad no es por nada pero parece que únicamente lees por leer y ni siquiera se te nota un interés real en el asunto. Aprende a tener autoiniciativa.

Ejemplo sacado de la documentación de PHP en la función mysql_real_escape_string()

Código PHP:
Ver original
  1. <?php
  2. // Conexión
  3. $enlace = mysql_connect('anfitrión_mysql', 'usuario_mysql', 'contraseña_mysql')
  4.     OR die(mysql_error());
  5.  
  6. // Consulta
  7. $consulta = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
  8.             mysql_real_escape_string($usuario),
  9.             mysql_real_escape_string($contraseña));
  10. ?>

Pregunta sencilla, donde usan mysql_query() en se ejemplo? si sabes que hace la función sprintf? y si no te quedaba claro, es difícil buscar en Google

Si, si, puede sonar un poco burdo lo que digo, pero mi intención es que te des cuenta de que investigando por ti mismo puedes encontrar mejor información y aprender cosas nuevas sin depender de lo que digan unas personas en el foro

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #12 (permalink)  
Antiguo 16/01/2014, 11:16
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Me funciona pero no del todo, me escapa las comillas dobles (eso ya es un alivio) pero las simples no.

Este es mi código:

Código PHP:
Ver original
  1. $sql = sprintf("INSERT INTO noticias (titulo, autor, descripcion, keywords, noticia, ruta_imagen, alt_imagen, nombre_imagen, fecha) VALUES ('$titulo', '$autor', '$descripcion', '$keywords','$noticia','$ruta','$alt_imagen','$nombre_imagen', NOW())",
  2.                     mysql_real_escape_string($titulo),
  3.                     mysql_real_escape_string($autor),
  4.                     mysql_real_escape_string($descripcion),
  5.                     mysql_real_escape_string($keywords),
  6.                     mysql_real_escape_string($noticia),
  7.                     mysql_real_escape_string($ruta),
  8.                     mysql_real_escape_string($alt_imagen),
  9.                     mysql_real_escape_string($nombre_imagen));
  10.                    
  11.                     mysql_query($sql, $connect) or die("Error en BBD: ".mysql_error());

Y en el formulario lo estoy probando con el texto: 'escapando comillas simples' y me sale

Código MySQL:
Ver original
  1. Error en BBD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'escapando comillas simples'', 'Andrés Buitrago', ''escapando comillas simples'.' at line 1

Los campos que maneja el formulario son (en este orden exacto): Titulo, Autor (que es un value que se obtiene mediante $_SESSION), keywords, un campo para subir imagen del tipo 'file', texto alternativo para la imágen, noticia.

Para mayor análisis coloque el nombre de cada campo junto con lo que coloqué en el input y salió esto:

Código MySQL:
Ver original
  1. Error en BBD: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'probando comillas simples titulo'', 'Andrés Buitrago', ''probando comillas simp' at line 1

¿Alguna idea? :(
  #13 (permalink)  
Antiguo 16/01/2014, 11:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Código PHP:
Ver original
  1. $sql = sprintf("INSERT INTO noticias (titulo, autor, descripcion, keywords, noticia, ruta_imagen, alt_imagen, nombre_imagen, fecha) VALUES ('$titulo', '$autor', '$descripcion', '$keywords','$noticia','$ruta','$alt_imagen','$nombre_imagen', NOW())",
  2. mysql_real_escape_string($nombre_imagen));
  3. mysql_query($sql, $connect) or die("Error en BBD: ".mysql_error());



Ahora lo que tienes es un serio problema de entendimiento de sprintf()... estás poniendo cualquier cosa.

En serio, sin ofender. ¿Estás leyendo bien y entendiendo cómo se usan las funciones de PHP?

Código PHP:
Ver original
  1. $sql = sprintf("INSERT INTO noticias (titulo, autor, descripcion, keywords, noticia, ruta_imagen, alt_imagen, nombre_imagen, fecha) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW())",
  2. mysql_real_escape_string($nombre_imagen));
  3. mysql_query($sql, $connect) or die("Error en BBD: ".mysql_error());

De lo contrario sería mas o menos:
Código PHP:
Ver original
  1. $titulo = mysql_real_escape_string($titulo);
  2. $autor = mysql_real_escape_string($autor);
  3. $descripcion = mysql_real_escape_string($descripcion);
  4. $keywords = mysql_real_escape_string($keywords);
  5. $noticia = mysql_real_escape_string($noticia);
  6. $ruta = mysql_real_escape_string($ruta);
  7. $alt_imagen = mysql_real_escape_string($alt_imagen);
  8. $nombre_imagen = mysql_real_escape_string($nombre_imagen);
  9. $sql = sprintf("INSERT INTO noticias (titulo, autor, descripcion, keywords, noticia, ruta_imagen, alt_imagen, nombre_imagen, fecha) VALUES ('$titulo', '$autor', '$descripcion', '$keywords','$noticia','$ruta','$alt_imagen','$nombre_imagen', NOW())");
  10. mysql_query($sql, $connect) or die("Error en BBD: ".mysql_error());
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 16/01/2014, 11:56
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Estoy leyendo bien. Sé para qué funciona el sprintf pero nunca me había atrevido a utilizarlo dado que cada letra al lado del % cumple determinada función ¿no?

Usé ambos códigos, el primero (no sé si no servía tal y como lo pusiste o si yo soy muy de malas) no funcionó. El segundo, que era justo como lo iba a poner antes de irme a almorzar, funcionó de maravilla.

Por eso mismo preguntaba si había que ponerlos ANTES o DESPUES del query NO DE LA EJECUCIÓN DEL MISMO. Porque al usar la lógica debería de formatear antes de insertar... Perdón por las novatadas pero ustedes son mis maestros, gracias por ello
  #15 (permalink)  
Antiguo 16/01/2014, 13:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Cita:
Sé para qué funciona el sprintf pero nunca me había atrevido a utilizarlo dado que cada letra al lado del % cumple determinada función ¿no?


Esa función está descripta en el manual:
Cita:

Un especificador de tipo que indica como que tipo deben ser tratados los datos del argumento. Los tipos posibles son:

% - un caracter de porcentaje literal. No se requiere argumento.
b - el argumento es tratado como un integer y presentado como un número binario.
c - el argumento es tratado como un integer y presentado como el caracter con ese valor ASCII.
d - el argumento es tratado como un integer y presentado como un número decimal (con signo).
e - el argumento es tratado como notación científica (e.g. 1.2e+2). El especificador de precisión indica el número de dígitos después del punto decimal a partir de PHP 5.2.1. En versiones anteriores, se tomó como el número de dígitos significativos (uno menos).
E - como %e pero utiliza la letra mayúscula (e.g. 1.2E+2).
u - el argumento es tratado como un integer y presentado como un número decimal sin signo.
f - el argumento es tratado como un float y presentado como un número de punto flotante (consciente de la configuración regional).
F - el argumento es tratado como un float y presentado como un número de punto flotante (no consciente de la configuración regional). Disponible desde PHP 4.3.10 y PHP 5.0.3.
g - más corto de %e y %f.
G - más corto de %E y %f.
o - el argumento es tratado como un integer y presentado como un número octal.
s - el argumento es tratado y presentado como un string.
x - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en minúsculas).
X - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en mayúsculas).
El primer ejemplo del mismo manual sería:
Cita:

Ejemplo #1 Intercambio de argumentos
Código PHP:
Ver original
  1. <?php
  2. $num = 5;
  3. $location = 'tree';
  4.  
  5. $format = 'There are %d monkeys in the %s';
  6. echo sprintf($format, $num, $location);
  7. ?>
Esto producirá "There are 5 monkeys in the tree". Pero imaginemos que estamos creando un string de formato en un archivo separado, generalmente por que nos gustaría internacionalizarlo y lo reescribimos así:
El primer ejemplo que te puse era una trampa de Copy+Paste... y copiaste sin revisar si estaba bien escrito, o analizar el codigo en base al manual.
Vuelve a mirarlo y luego corrigelo.

Si quieres la clave, toma este ejemplo y ejecutalo:
Código PHP:
 <?php
$num 
5;
$location "tree's";
$location addslashes($location);

$format "There are %d monkeys in the '%s'";
echo 
sprintf($format$num$location);
?>
Si ves como resulta, entenderás cómo deberías usar el segundo ejemplo que te pasé.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/01/2014 a las 13:55
  #16 (permalink)  
Antiguo 17/01/2014, 00:17
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Les hago caso y posteo mi primer código con sprintf... Como no, con errores. Echenle un ojo:

Código PHP:
Ver original
  1. <?php
  2.  
  3.             if (isset($_SESSION['nivel'])) {
  4.                 $titulo = $_POST['titulo'];
  5.                 $autor = $_POST['autor'];            
  6.                 $select_cat = $_POST['select_cat'];
  7.                 $select_cat = str_replace(" ", "_", $select_cat);
  8.                
  9.                 $txt_alt = $_POST['txt_alt'];
  10.                 $nombre_imagen = $_FILES['imagen']['name'];
  11.                 $nombre_imagen = str_replace(" ", "_", $nombre_imagen);
  12.                 $nombre_imagen = str_replace("?", "_", $nombre_imagen);
  13.                 $nombre_imagen = str_replace("¿", "_", $nombre_imagen);
  14.                 $nombre_imagen = str_replace("-", "_", $nombre_imagen);
  15.                 $nombre_imagen = str_replace("¡", "_", $nombre_imagen);
  16.  
  17.  
  18.                 if (empty($titulo) ||   empty($autor) || empty($select_cat) ||     empty($txt_alt)) {
  19.                     echo '
  20.                        <div class="container">
  21.                            <div class="center-block logig-form">
  22.                                <div class="panel panel-default">
  23.                                    <div class="panel-heading">Error</div>
  24.                                    <div class="panel-body">                                
  25.                                        <p>Debes llenar todos los campos, por favor, <a href="javascript:history.back(1)">vuelve</a>  e intentelo nuevamente.</p>                        
  26.                                    </div>
  27.                                </div>
  28.                            </div>
  29.                        </div> <!-- container  -->
  30.                    ';
  31.                 }else{
  32.  
  33.                     $carpeta = "img/imagenes/".$select_cat."/"."titulo"."/";
  34.                     mkdir($carpeta);
  35.                     $destino = $carpeta.$_FILES['imagen']['name'];
  36.                    
  37.                     copy($_FILES['imagen']['tmp_name'],$destino);
  38.  
  39.                     echo '<img src="'.$destino.'">';
  40.  
  41.                     if ($select_cat==='General') {
  42.                    
  43.                         $sql = sprintf("INSERT INTO imagenes_general (titulo, autor, txt_alt, ruta, fecha) VALUES ('%s', '%s', '%s', '%s', NOW())",mysql_real_escape_string($titulo),mysql_real_escape_string($autor),mysql_real_escape_string($txt_alt),mysql_real_escape_string($destino));
  44.                         mysql_query($sql,$connect);
  45.                         echo 'yay';
  46.  
  47.  
  48.                     }elseif ($select_cat === 'Distrito_comico') {
  49.  
  50.                         $sql = sprintf("INSERT INTO imagenes_distrito_comico (titulo, autor, txt_alt, ruta, fecha) VALUES ('%s', '%s', '%s', '%s', NOW())",mysql_real_escape_string($titulo),mysql_real_escape_string($autor),mysql_real_escape_string($txt_alt),mysql_real_escape_string($destino));
  51.                         echo $sql;
  52.                         mysql_query($sql,$connect);
  53.                         echo 'Yay';
  54.  
  55.                    
  56.                     }else{
  57.                         echo 'Error en la base de datos '.mysql_error();
  58.                     };
  59.                 }
  60.             }
  61.  
  62.  
  63.  
  64.  
  65.         ?>

El código se ejecuta de maravilla, imprimí los querys y se muestran tal y como debe ser, el problema es que no registra en la base de datos.

Esta es una página diferente a la que comentaba en anteriores mensajes pero me pareció bueno hacer el paralelo. ¿Alguna idea de por qué no escribe en la BD? Cabe resaltar que no bota error, tan solo no escribe.

Gracias :)

Una cosita... Leí por ahí que el uso de sprintf aumenta la seguridad del sitio ¿es esto cierto? ¿qué tiene de diferente a hacerlo de "la manera tradicional"?

Última edición por MeDxEc; 17/01/2014 a las 00:20 Razón: Duda extra
  #17 (permalink)  
Antiguo 17/01/2014, 03:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Seré curioso... pero...
¿Dónde estás abriendo la conexión a la base en MySQL?



Yo no lo veo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 17/01/2014, 05:11
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

La conexión está abierta en un include al inicio de la pagina. Junto con session_start()
  #19 (permalink)  
Antiguo 17/01/2014, 05:14
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Oh, y otra cosa... Ayer hice lo que dijiste de mysql_real_escape_string y no me está escapado todos los caracteres, también me pone problemas al guardar un % :(
  #20 (permalink)  
Antiguo 17/01/2014, 06:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

¿Y al menos te fijaste que en la prueba que te postee en lugar de esa función (que depende de la conexión), usé addslashes()?

¿Intentaste hacer una prueba por fuera de tu script, creando otro explusivamente para verificar la construcción de la sentencia?

¿Cópmo queda escrita esa sentencia en la variable $sql?
Postea eso.

A mi entender estás escribiendo un código inútilmente complicado...
Trata de simplificarlo y hacerlo por etapas de modo que sea visible en qué punto se generan los errores.

Procesa primero lo que contienen las variables con addslashes() y luego usa las variables directamente.

Yo, al menos, reemplazaría esto:
Código PHP:
mysql_query($sql,$connect); 
por esto:
Código PHP:
mysql_query($sql,$connect) or die(mysql_error()); 
AL menos así sabrías qué diferencia hay entre lo que manda la sentencia y lo que recibe la base.
Aunque a mi me parece que el tema viene siendo de charset...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 17/01/2014, 09:50
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Todo estaba bien -.- El problema era, en una tabla el nombre. Y en la otra que le faltaba un campo que yo sí tenía en mi archivo SQL pero no sé como se me pasó agregarlo en la tabla. Disculpa por hacerte perder el tiempo en errores de novato y trasnochado.

Respecto a lo de addslashes() no lo agregué porque leyendo por ahí decían que era propenso a inyecciones y que dado a que era para una base de datos lo mejor era mysql_real_scape_string(), mi problema es que solo sirve con las comillas y paréntesis. Falla con los %, me dice "very few arguments in sprintf()" :l
  #22 (permalink)  
Antiguo 17/01/2014, 10:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Cita:
Falla con los %, me dice "very few arguments in sprintf()" :l
La cantidad de argumentos y la de variables no coincide.
Tiene que haber tantos parámetros con "%" como variables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 17/01/2014, 10:47
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 11 meses
Puntos: 2
Respuesta: ¿Como escapar comillas simples para que no generen errores en consulta?

Pero este error se me presenta en el primer código que te envié, donde no uso los "%" sino simplemente las variables escapadas. En el segundo código no presento ningún problema. Modificaré el primero y comento que sucede ;)

Oh y respecto a lo de los % en la primera que me genera error, ¿qué puedo hacer? Estoy escapando las variables y de todas maneras me genera error y addslashes() es insegura y no es correcta para esto.

Gracias por toda la ayuda, @gnzsoloyo

Etiquetas: comillas, errores, escapar, mysql, simples, sql
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 15:18.