Foros del Web » Programando para Internet » PHP »

Escapar Comillas Simples de MYSQL

Estas en el tema de Escapar Comillas Simples de MYSQL en el foro de PHP en Foros del Web. Hola a todos, gracias por los aportes que dan a esta comunidad, nos ayudan mucho, hoy tengo un problema que no puede solventarlo, talvez alhuien ...
  #1 (permalink)  
Antiguo 17/12/2013, 11:44
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Escapar Comillas Simples de MYSQL

Hola a todos, gracias por los aportes que dan a esta comunidad, nos ayudan mucho, hoy tengo un problema que no puede solventarlo, talvez alhuien se topo con el mismo error y me ayuda a solucionarlos.
Tengo un consulta que extrae los nombres de una base de datso, estos nombre ppueden tener acentos, tildes etc, como he leido para armar la consulta sql toda la sintaxis se pone entre comillas dobles ("Select....") y entre simples lo que quiero comparar que es un string ('')
Ejemplo: " Select id from tabla where nombre='$variable' "; hasta ahi todo bien

El problema es cuando en la bd hay un registro parecido a esto Samuel Rodri'guez, por error o nombre propio lleva incluido un (') y al hacer la consulta como aparece la comilla simple me delimita la consulta y me lanza error...


[2/2] QueryException: [Syntax Error] line 0, col 272: Error: Expected end of string, got 's' +

[1/2] QueryException: SELECT concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) FROM ABCIsystemBundle:AbcMembers a WHERE concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) like 'Samuél Juan Chepon Rodriguez's Melendez'

Ayuda???
  #2 (permalink)  
Antiguo 17/12/2013, 11:47
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Escapar Comillas Simples de MYSQL

Utiliza la función addslashes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 17/12/2013, 11:54
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Escapar Comillas Simples de MYSQL

donde utilizo esa funcion?? la antepongo antes del campo dentro de la consulta??
Algo asi:
"SELECT .... FROM ..... where addslashes( ' $variable ' ) ";
  #4 (permalink)  
Antiguo 17/12/2013, 11:57
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, 5 meses
Puntos: 2658
Respuesta: Escapar Comillas Simples de MYSQL

Cita:
Iniciado por pmeninsaxmus16 Ver Mensaje
donde utilizo esa funcion?? la antepongo antes del campo dentro de la consulta??
Algo asi:
"SELECT .... FROM ..... where addslashes( ' $variable ' ) ";


¿En serio lo estás preguntando?

Por lo pronto es una función de PHP, no de MySQL, por ende, no puedes usarla dentro del SQL... ¿No te parece?

Lo que debes hacer es procesar el contenido de la variable en PHP con esa función, y su resultado es lo que va al SQL, no la función en si.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/12/2013, 12:03
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Escapar Comillas Simples de MYSQL

Sería más o menos así:

Código PHP:
Ver original
  1. $query = mysqli_query($conex, sprintf("SELECT * FROM tabla WHERE campo = '%s'", addslashes($variable));

Si el contenido de la variable fuera, por ejemplo, O'riordan, quedaría O\'riordan.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 17/12/2013, 12:24
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: Escapar Comillas Simples de MYSQL

No es recomendable usar addslashes() debido a que pueden darse problemas de codificación.
Utiliza mysql_real_escape_string(), es más seguro.
  #7 (permalink)  
Antiguo 17/12/2013, 12:31
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Escapar Comillas Simples de MYSQL

Ejemplo de uso de mysql_real_escape_string(), ya utilize el addslashes() y siempre me corta la consulta aunq le anteponga la \ antes de la comilla simple ( ' )
  #8 (permalink)  
Antiguo 17/12/2013, 12:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Escapar Comillas Simples de MYSQL

Estaba por recomendarle lo mismo aunque sería mejor que ya empiece a hacer uso de la extensión Mysqli, utilizando en este caso la función mysqli_real_escape_string().

pmeninsaxmus16, así sería:

Código PHP:
Ver original
  1. $query = mysqli_query($conex, sprintf("SELECT * FROM tabla WHERE campo = '%s'", mysqli_real_escape_string($conex, $variable));
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 17/12/2013, 14:47
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Escapar Comillas Simples de MYSQL

Esta es mi query
Código:
$sql="SELECT concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) FROM ABCIsystemBundle:AbcMembers a WHERE concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) ='".addslashes($cad2)."'";
                $repositorio = $this->getEntityManager()->createQuery($sql); 
                try {  
                        $results = $repositorio->getSingleResult();
                        $filtro = implode(' ', $results);  //comvierte a string el array
                        $convert=(string)$filtro;        
                        return $convert;
                    } 
                catch (\Doctrine\Orm\NoResultException $e) { $repositorio = null; }
            }
y me tira siempre este error
Código:
[Syntax Error] line 0, col 269: Error: Expected end of string, got 's' 

QueryException: SELECT concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) FROM ABCIsystemBundle:AbcMembers a WHERE concat(concat(concat(concat(trim(a.firstname),' '),trim(a.middlename)),' '),trim(a.lastname)) ='Samuél Juan Chepon Rodriguez\'s Melendez'
ya sea con el addslashes ó mysql_real_escape_string

y en el debug arroja esto
  #10 (permalink)  
Antiguo 17/12/2013, 15:02
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, 5 meses
Puntos: 2658
Respuesta: Escapar Comillas Simples de MYSQL

Por lo pronto, estás haciendo un código SQL innecesariamente complicado para una consulta tan simple. No pongas tantos CONCAT para enlazar cada parte. En MySQL uno solo alcanza para muchos bloques:
Código PHP:
Ver original
  1. $sql="SELECT CONCAT(TRIM(a.firstname),' ', TRIM(a.middlename), ' ', TRIM(a.lastname)) FROM ABCIsystemBundle:AbcMembers a WHERE CONCAT(TRIM(a.firstname),' ', TRIM(a.middlename), ' ', TRIM(a.lastname))  ='".addslashes($cad2)."'";
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 17/12/2013, 15:38
 
Fecha de Ingreso: noviembre-2013
Mensajes: 83
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Escapar Comillas Simples de MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo pronto, estás haciendo un código SQL innecesariamente complicado para una consulta tan simple. No pongas tantos CONCAT para enlazar cada parte. En MySQL uno solo alcanza para muchos bloques:
Código PHP:
Ver original
  1. $sql="SELECT CONCAT(TRIM(a.firstname),' ', TRIM(a.middlename), ' ', TRIM(a.lastname)) FROM ABCIsystemBundle:AbcMembers a WHERE CONCAT(TRIM(a.firstname),' ', TRIM(a.middlename), ' ', TRIM(a.lastname))  ='".addslashes($cad2)."'";
A nivel de consulta si extrae los datos, a nivel de la aplicacion web nada, muestra este error,
Código:
[Syntax Error] line 0, col 82: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','

Etiquetas: mysql
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 00:54.