Foros del Web » Programando para Internet » PHP »

bindParam funciona a medias.

Estas en el tema de bindParam funciona a medias. en el foro de PHP en Foros del Web. Por un lado tengo la clase que realiza la conexion a la db. Código PHP: class  DB  {     static  $db ;     static function  getConnection (){         if (empty( ...
  #1 (permalink)  
Antiguo 08/06/2012, 18:32
Avatar de jorges9  
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
bindParam funciona a medias.

Por un lado tengo la clase que realiza la conexion a la db.

Código PHP:
class DB {
    static 
$db;
    static function 
getConnection(){
        if (empty(
self::$db)) {
            
self::$db = new PDO("mysql:host=localhost;dbname=phpdb",
                                
"root",
                                
"");
        }
        return 
self::$db;
    }
    
    static function 
getStatement($query){
        
$db self::getConnection();
        return 
self::$db->prepare($query);
    }

Por otro lo cargo la consulta en el objeto y intento filtrar los datos
ej:
Código PHP:
$v2="UPDATE articulos SET precio=:precio ,descripcion=':texto', cantidad=:cant, descuento=:descuento where idarticulo=:idarticulo"/// se debera añadir el nombre de la tabla origen
        
$vo=db::getStatement($v2);
        
$vo->bindParam(":precio"$v1PDO::PARAM_INT);
        
$vo->bindParam(":texto"$v2PDO::PARAM_STR);
        
$vo->bindParam(":cant"$v3PDO::PARAM_INT);
        
$vo->bindParam(":descuento"$v4PDO::PARAM_INT);
                
$vo->bindParam(":idarticulo"$v5PDO::PARAM_INT);
        
$stmt->execute(); 

El problema radica en que solo me permite filtrar 1 sola vez, los otros bindparam no los toma, segun estuve leyendo cuando se filtran mas de 1 variable se debe de usar 'prepare ' por lo que lo estoy usando pero aun asi no logro explicar porque no me permite filtrar mas de un dato.
Este es un query de prueba, he intentado varios y el problema es el mismo, solo funciona si filtro uno.
Busque en la web sobre este problema puntual y no encontre nada parecido, por lo que agradezco su ayuda.

Última edición por jorges9; 09/06/2012 a las 06:52
  #2 (permalink)  
Antiguo 09/06/2012, 12:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: bindParam funciona a medias.

El prepare lo estás asignando a $vo, pero tratas de ejecutar la consulta con $stmt, creo que debería ser: $vo->execute();
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/06/2012, 17:31
Avatar de jorges9  
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: bindParam funciona a medias.

Código PHP:
Ver original
  1. $v2="UPDATE articulos SET precio=:precio ,descripcion=':texto', cantidad=:cant, descuento=:descuento where idarticulo=:idarticulo"; /// se debera añadir el nombre de la tabla origen
  2.         $vo=db::getStatement($v2);
  3.         $vo->bindParam(":precio", $v1, PDO::PARAM_INT);
  4.         $vo->bindParam(":texto", $v2, PDO::PARAM_STR);
  5.         $vo->bindParam(":cant", $v3, PDO::PARAM_INT);
  6.         $vo->bindParam(":descuento", $v4, PDO::PARAM_INT);
  7.                 $vo->bindParam(":idarticulo", $v5, PDO::PARAM_INT);
  8.         $vo->execute();

Es un ejemplo de prueba q puse, pero igualmente no me funciona, ignoro porque no me toma el bindparam..
En un insert que intente me añadio en el campo ':texto' o sea no me reemplaza la variable..
  #4 (permalink)  
Antiguo 09/06/2012, 17:42
Avatar de jorges9  
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: bindParam funciona a medias.

Descubri el error, por lo visto en la consulta lo que sea texto tampoco debe llevar comillas

Código PHP:
Ver original
  1. $v2="UPDATE articulos SET precio=:precio ,descripcion=:texto, cantidad=:cant, descuento=:descuento where idarticulo=:idarticulo"; /// se debera añadir el nombre de la tabla origen
  2.         $vo=db::getStatement($v2);
  3.         $vo->bindParam(":precio", $v1, PDO::PARAM_INT);
  4.         $vo->bindParam(":texto", $v2, PDO::PARAM_STR);


por lo visto bindParam lo reemplaza y se los añade a la consulta.

Etiquetas: bindparam, sql, tabla, variables
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 07:56.