Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Caracteres de Escape de Postgresql

Estas en el tema de Caracteres de Escape de Postgresql en el foro de PostgreSQL en Foros del Web. Buenos dias, tardes o noches segun la ocacio, vengo a comentarles una duda que tengo a ver si me pueden ayudar, el problema es el ...
  #1 (permalink)  
Antiguo 28/09/2013, 00:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Caracteres de Escape de Postgresql

Buenos dias, tardes o noches segun la ocacio, vengo a comentarles una duda que tengo a ver si me pueden ayudar,
el problema es el siguiente: quiero saber cual es o son los caracetres de escape que usa postgres ya que me encuentro trabajando con el, y lo que he encontrado es que el caracter de escape es este \'
sin embargo lo intengo usar haciendo una consulta yo mismo o mandandolo desde php y me da un error intentando ejecutar este sql como ejemplo

Código SQL:
Ver original
  1. SELECT d.cod_documento_bib, d.docbib_titulo, d.docbib_cantidad_ejemplares, td.tipdoc_nombre, p.per_nombres, p.per_apellidos,
  2.         (SELECT COUNT(e.eje_disponibilidad) AS cant_disponible FROM tejemplar AS e WHERE eje_disponibilidad = '1' AND e.cod_documento_bib = d.cod_documento_bib)
  3. FROM tdocumento_bibliografico AS d
  4.     LEFT JOIN tdetalle_autor AS da ON da.cod_documento_bib = d.cod_documento_bib
  5.     LEFT JOIN tpersona AS p ON p.cedula = da.cedula
  6.     LEFT JOIN tdetalle_descriptor AS dd ON dd.cod_documento_bib = d.cod_documento_bib
  7.     LEFT JOIN tdescriptor AS des ON des.cod_descriptor = dd.cod_descriptor
  8.     JOIN ttipo_documento AS td ON d.cod_tipo_documento = td.cod_tipo_documento
  9. WHERE d.docbib_cantidad_ejemplares > '0'
  10. OR UPPER(d.docbib_titulo) LIKE UPPER('%\'%')
  11. GROUP BY d.cod_documento_bib, d.docbib_cantidad_ejemplares, td.tipdoc_nombre, p.per_nombres, p.per_apellidos,d.docbib_titulo
  12. LIMIT 10 offset 0

como este

Código:
ERROR: una cadena de caracteres entre comillas está inconclusa en o cerca de «') GROUP BY
y este
Código:
ERROR: una cadena de caracteres entre comillas está inconclusa en o cerca de «')
llevo tiempo buscando en dias en distintos foros y paginas y no encuentro una solucion a este problema, asi mismo si me pueden decir como haría si en la cadena a buscar la persona ingresa mas de un apostrofe (') como haría para quitarlos a todos o colocarle el caracter de escape...

Gracias de antemano....

Última edición por gnzsoloyo; 28/09/2013 a las 06:42
  #2 (permalink)  
Antiguo 28/09/2013, 06:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Caracteres de Escape de Postgresql

Cita:
si en la cadena a buscar la persona ingresa mas de un apostrofe (') como haría para quitarlos a todos o colocarle el caracter de escape
Eso lo deberías controlar en el ingreso de los datos, en la aplicación, y no en la base de datos. ¿no te parece?

Por otro lado, según el manual de referencia de PostgreSQL, esa forma de usarlo es correcta, pero como mencionas que usas PHP, cabe preguntarse si el problema no lo está provocando el propio PHP.
Debes tener en cuenta que dentro del PHP, el escape tiene impacto cuando manipulas cadenas de texto, de modo que en realidad puede estar produciendose una doble ejecución del escape.
¿A qué me refiero?
Simplemente a que si esa sintaxis la estás creando en una cadena de texto dentro del PHP, el PHP ya está absorbiendo el uso del escapado, y por tanto deja de existir el caracter al momento de enviarlo a Posgre.
En otras palabras, deberías verificar cómo queda la query antes de enviarla a la base. Muy probablemente en lugar de estar así:
Código SQL:
Ver original
  1. OR UPPER(d.docbib_titulo) LIKE UPPER('%\'%')
si la imprimes en pantalla, aparezca así:
Código SQL:
Ver original
  1. OR UPPER(d.docbib_titulo) LIKE UPPER('%'%')
Si eso es lo que está sucediendo, la solución es simple: Hay que escapar el escape. Uno para que lo consuma PHP, y otro para Posgre.
Código SQL:
Ver original
  1. OR UPPER(d.docbib_titulo) LIKE UPPER('%\\'%')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/10/2013, 14:31
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Caracteres de Escape de Postgresql

Revisa la documentación oficial

http://www.postgresql.org/docs/9.2/s...x-lexical.html

Etiquetas: caracteres, escape, postgres
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 11:22.