Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema PDO bind

Estas en el tema de Problema PDO bind en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Tengo problemas al insertar correctamente en la base de datos con la clase PDO, me guarda los valores con una codificación incorrecta. A pesar ...
  #1 (permalink)  
Antiguo 09/05/2010, 03:41
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Problema PDO bind

Buenas,

Tengo problemas al insertar correctamente en la base de datos con la clase PDO, me guarda los valores con una codificación incorrecta. A pesar que tengo definida la tabla como UTF-8

FFC Wacker München - 1. FFC Frankfurt II
Bayer Leverkusen - TuS Wörrstadt
'FCR 2001 Duisburgo II - FC Köln

Antes de utilizar esta clase lo solucionaba con mysql_real_escape_string()

Y estaba leyendo que con PDO no hacía falta utilizar mysql_real_escape_string() y en que en su defecto bastaba con utilizar bindParam


Código PHP:
Ver original
  1. $inserta_en_tbl_cuotas = $db->prepare("INSERT INTO $tbl_cuotas (idcompeticion,idevento,:evento,fecha,idmercado,idtipomercado,mercado,idpronostico,pronostico,cuota)
  2.                                                             VALUES (?,?,?,?,?,?,?,?,?,?)");
  3.                     $inserta_en_tbl_cuotas->bindParam(':evento', $evento);
  4.                     $inserta_en_tbl_cuotas->execute(array($IDcompeticion,$IDevento,$evento,$fecha,$IDmercado,$IDtipomercado,$mercado,$IDpronostico,$pronostico,$cuota));

Tengo que pasar todos los parámetros por bindParam? yo creo que las dos últimas lineas se están solapando...

Código:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in C:\AppServ\www\00-laboratorio_test\secciones\GET_BET\V2_SIMPLEXML.php:69 Stack trace: #0 C:\AppServ\www\00-laboratorio_test\secciones\GET_BET\V2_SIMPLEXML.php(69): PDOStatement->execute(Array) #1 {main} thrown in C:\AppServ\www\00-laboratorio_test\secciones\GET_BET\V2_SIMPLEXML.php  on line 69
¿Podéis echarme una mano?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 09/05/2010, 06:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problema PDO bind

Si tienes la base de datos declarada como UTF-8, tienes que indicar que los valores que estás enviando son UTF-8, puedes lograrlo con utf8_encode. También te recomiendo que indiques los headers y los arcihvos como utf-8. Busca en el foro ya han sugerido como hacerlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 09/05/2010, 07:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema PDO bind

Cita:
Iniciado por abimaelrc Ver Mensaje
Si tienes la base de datos declarada como UTF-8, tienes que indicar que los valores que estás enviando son UTF-8, puedes lograrlo con utf8_encode. También te recomiendo que indiques los headers y los arcihvos como utf-8. Busca en el foro ya han sugerido como hacerlo.
La tabla está declarada como UTF-8

Probé el utf8_encode() pero no funcionó, guardaba los valores igual, tuve que utilizar utf8_decode() raro raro raro...

Saludos!
  #4 (permalink)  
Antiguo 09/05/2010, 11:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema PDO bind

Por otro lado, si estas usando bindVariables necesitas pasar todas por el bind para que no te lance esa excpeción.

Saludos.
  #5 (permalink)  
Antiguo 09/05/2010, 16:37
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema PDO bind

Cita:
Iniciado por GatorV Ver Mensaje
Por otro lado, si estas usando bindVariables necesitas pasar todas por el bind para que no te lance esa excpeción.

Saludos.
Gracias GatorV, es lo que me temía, si usas bindParam para una, tienes que hacerlo con todas las variables a la fuerza.

Salu2!
  #6 (permalink)  
Antiguo 10/05/2010, 08:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema PDO bind

No, solo si usas placeholders, bien puedes hacer algo así:
Código PHP:
Ver original
  1. $query = "INSERT INTO foo (col1, col2, col3, col4) VALUES (:col1, '$col2', '$col3', '$col4')";

Saludos.
  #7 (permalink)  
Antiguo 10/05/2010, 12:24
 
Fecha de Ingreso: agosto-2007
Mensajes: 10
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Problema PDO bind

Recuerda que el Cliente de Mysql tiene un bug con su codificación, estaría mal si usas utf8_encode y cosas de estas, ademas verifica que todo tu entorno de desarrollo este en UTF-8 (servidor web, BD, editor de texto, etc)

Etiquetas: bind, pdo
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:53.