PHP - problema con " con postgres y php

 
Vista:

problema con " con postgres y php

Publicado por Diego (4 intervenciones) el 13/10/2010 13:40:07
Hola, tengo un problema con las " usando PHP y Postgres. El problema es que cuando quiero hacer una insercción o una consulta con un valor que tenga ", al construiri la consulta, finaliza justo donde encuentra ese valor de " que forma parte del campo con el que quiero trabajar.

Este es el error que da:

Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: la sintaxis de entrada no es válida para integer: «» LINE 1: ...T INTO PeliculaGenero (IdPelicula,IdGenero) VALUES ('47','') ^ in insertarPeliculasFiltro.php on line 1442
ERROR: la sintaxis de entrada no es válida para integer: «» LINE 1: ...T INTO PeliculaGenero (IdPelicula,IdGenero) VALUES ('47','') ^

Lo que quiero es insertar una pelicula en la tabla pelicula que tenga un determinado genero. El nombre del genero tiene " entre sus caracteres.

No puedo coger el valor directamente desde un formulario, tiene que pasar a traves de otra pagina intermedia que, segun un determinado valor, va a otras paginas diferentes.

¿Hay alguna función como addslashes() para trabajar con "?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con

Publicado por Leandro (10 intervenciones) el 13/10/2010 17:42:59
Lo que podrias hacer es utilizar la funcion str_replace:
que cambie las comillas dobles por comillas dobles escapeadas

$consulta = ...

$consulta = str_replace("","\",$consulta)

por mas info mira: http://www.php.net/manual/en/function.str-replace.php

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con

Publicado por Diego (4 intervenciones) el 15/10/2010 10:17:38
Hola Leandro, gracias por contestar. He probado a hacer lo que me has dicho, pero nada. La consulta es esta:

INSERT INTO Pelicula (IdPelicula,Signatura,Titulo,TituloOriginal,TextoOriginal,Anio,FechaEntrada,Duracion,Extremadura,Observaciones,Pack,PeliculasAsociadas) VALUES (nextval('seqpelicula'),128,'PELI128','','',0,'2010-10-15',0,'0','hola \" hola','0','')

Lo que hago es insertar un comentario con la cadena hola " hola. Como tiene las ", la sentencia de insercción se corta en hola \ y, logicamente, da error. No se como solucionar esto, he pensado sustituir " por dos ', pero no es el mismo caracter, no es lo mismo y es una chapuza, jeje. ¿¿¿Alguien puede ayudarme???

Saludos.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con

Publicado por Leandro (10 intervenciones) el 15/10/2010 13:08:32
INSERT INTO Pelicula (IdPelicula,Signatura,Titulo,TituloOriginal,
TextoOriginal,Anio,FechaEntrada,
Duracion,Extremadura,Observaciones,Pack,PeliculasAsociadas)
VALUES (nextval('seqpelicula'),128,'PELI128','','',0,'2010-10-15',0,'0','hola \" hola','0','');

La consulta no tiene error de sintaxis, es decir, no deberia cortarse en la mitad
seguramente sea otro el error y por eso te aparece cortada la consulta.
Mirando el error que te da:

"Warning: pg_exec() [function.pg-exec]:
Query failed: ERROR: la sintaxis de entrada no es válida para integer..."

Seguramente estes insertando un valor de un tipo distinto de Integer en
un campo integer.
Como definiste la tabla, es decir, los tipos?

Puedes mostrarme el crate table de pelicula que hiciste?
Con esos datos podré ver bien en donde esta el error.
Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con

Publicado por Diego (4 intervenciones) el 21/10/2010 10:04:38
Hola Leandro, muchas gracias por contestar. Mira la tabla es esta:
Tabla Pelicula:
IdPelicula int
Signatura int
Titulo varchar(50)
TituloOriginal varchar(50)
TextoOriginal varchar(50)
Anio int
Fecha Date
Duracion int
Extremadura smallint
Observaciones varchar(200)
Pack smallint
PeliculasAsociadas varchar(100)

El error aparece solamente cuando pongo " en observaciones. Creo que es porque busca un valor del tipo smallint para insertar despues del campo observaciones (en el campo pack) y no lo encuentra. Por eso da error.
Sigo pensando que necesito hacer que las " no corten la consulta. he probado a poner \", pero nada. No se de verdad que puede ser.
No se te ocurre nada?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con

Publicado por Leandro (10 intervenciones) el 21/10/2010 14:39:17
Primero que nada, segun la definicion de la tabla y tu consulta:
en la tabla tienes en campo: Fecha
y en la consulta: FechaEntrada

INSERT INTO Pelicula (IdPelicula,Signatura,Titulo,TituloOriginal,
TextoOriginal,Anio,FechaEntrada,Duracion,Extremadura,Observaciones,
Pack,PeliculasAsociadas) VALUES
(nextval('seqpelicula'),128,'PELI128','','',0,'2010-10-15',0,'0','hola \" hola','0','')

Deberias arreglar eso primero.

Luego, que se corte la consulta en la comilla depende de si el string en el que escribes la consulta lo encierras entre comillas simples o dobles.
Si lo encierras en un tipo de comillas y adentro usas el mismo tipo de comillas tienes que ponerle la barra ( \ ) para indicar que es un caracter del string y no el fin del string.

Intenta hacer esto:

$consulta = " INSERT INTO Pelicula (IdPelicula,Signatura,Titulo,TituloOriginal,
TextoOriginal,Anio,Fecha,Duracion,Extremadura,Observaciones,
Pack,PeliculasAsociadas) VALUES
(nextval('seqpelicula'),128,'PELI128','','',0,'2010-10-15',0,0,'hola \" hola',0,'') ";

$resutlado = pg_query($consulta);

Notar que cambie el nombre de la fecha.
Tambien me doy cuenta que a los smallint los pones entre comillas, en ppio no deberia haber problema con eso pero por las dudas se los saqué.
Al string de la consulta lo encerre entre comillas dobles por eso hago el \" en el campo observaciones.

Prueba ejecutar eso y me dime si te funciona o no.
En caso de que no copia y pega exactamente lo que te dice asi vemos que esta
pasando.

En principio, esta consulta estaria correcta, es decir, no tendria error de sintaxis.

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con

Publicado por Diego (4 intervenciones) el 02/11/2010 12:51:23
Hola Leandro, he estado haciendo pruebas y no se produce ningun error, simplemente al insertar el campo observaciones, inserta hola mas el espacio en blanco que hay antes de las ". Sigo sin saber que puede ser, porque no se reconoce el caracter \ para decir que las " no son el fin de cadena, si no que sigue.

Si eso mismo lo hago con el echo 'hola \" hola', lo que veo en el navegador es hola " hola, como deberia ser, pero a la hora de hacer la insercción en sql, no funciona.

La verdad es que no se como voy a solucionar este problema.

Si se te ocurre algo, te lo agradeceria mucho.

Un saludo y muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar