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

Problema con PDO

Estas en el tema de Problema con PDO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimados amigos; estoy teniendo un problema con una conexion PDO. Tengo una clase Loguearse que tiene 2 metodos: uno loguea al usuario y el otro ...
  #1 (permalink)  
Antiguo 25/10/2008, 14:31
 
Fecha de Ingreso: diciembre-2007
Mensajes: 178
Antigüedad: 16 años, 4 meses
Puntos: 1
Problema con PDO

Estimados amigos;
estoy teniendo un problema con una conexion PDO.

Tengo una clase Loguearse que tiene 2 metodos:
uno loguea al usuario y el otro crea un token en la base de datos, la funcion creartoken es utilizada por la primera.
Las llamadas a la base por separado funcionan bien pero cuando con una misma conexion intento hacer los dos llamados, el segundo llamado no me lo hace, le hago un var_dump() y me sale vacio.
No entiendo porque cuando llamo nuevamente a la variable '$this->conexionbd' esta llega vacia.
Les dejo las clases :

Código PHP:
class Singleton{

public static 
$instance;
public function 
__construct(){}

public static function  
getinstance(){
    if(empty(
Singleton::$instance)){
Singleton::$instance = new PDO("mysql:host=localhost;dbname=baseuno""user","pass");
    }
    return 
Singleton::$instance;
}


Código PHP:
include('class.Singleton.php');
include(
'class.Formulario.php');

class 
Loguearse{
    private 
$conexionbd;
    private 
$usu;
    private 
$pas;
    
    public function 
__construct($usua=null$pass=null){
        
$this->conexionbd=Singleton::getinstance();
        
$this->conexiondos=Singleton::getinstance();
        
$this->usu=$usua;
        
$this->pas=$pass;
    }
    
    public function 
loguearusuario(){
        
    
$consulta="select COUNT(*) from administradores where usuario='$this->usu' && pass='$this->pas'";
        
$count=$this->conexionbd->query($consulta);
        
        

if(
$count->fetchColumn() == 1){

    
$this->creartoken();
    
    
$_SESSION['usuario']=$this->usu;
    
    
$sessi=utf8_encode('sesión');
    echo
"<span class=\"letra\">Bienvenido ".$this->usu.", la ".$sessi." ya ha sido activada.</span>";
    
}

else{
    
    echo
"<span class=\"letra\">Los datos por Ud. ingresados no son correctos.</span><br>\n";
    
$dos=new Formulario();
    
$dos->verformulario();
    
}

}

    
    public function 
creartoken(){
        
$numtoken=rand(10000,99999);
        
$count $this->conexionbd->exec("UPDATE administradores SET token='$numtoken' WHERE usuario='$this->usu'");
        
var_dump($count);
        if(
$count==1){
                
        
$_SESSION['token']=$numtoken;
        
        }
    }


Asi instancio:
Código PHP:
session_start();
include_once(
'clases/class.Loguearse.php');
$usuario=$_POST['usuario'];
$password=md5($_POST['password']);


$sso=new Loguearse($usuario,$password);
$sso->loguearusuario(); 
  #2 (permalink)  
Antiguo 25/10/2008, 20:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con PDO

Mmm veo que el var_dump() lo haces sobre $count, no sobre $this->conexionbd, prueba hacer el var_dump a esa variable.

Saludos.
  #3 (permalink)  
Antiguo 26/10/2008, 11:41
 
Fecha de Ingreso: diciembre-2007
Mensajes: 178
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Problema con PDO

Muchas gracias GatorV por contestarme.
Hace unos minutos encontre la solucion (anoche estaba muy mareado y largue todo jaja!).

Para los que les interese, coloque este codigo en la funcion creartoken:
Código PHP:
 if (!$count) {
    echo 
"\nPDO::errorInfo():\n";
    
print_r($conexiondb->errorInfo());

Y me salió el siguiente error:
Código PHP:
PDO::errorInfo(): Array ( [0] => HY000 [1] => 2014 [2] => Cannot execute queries while other unbuffered queries are active
La solucion fue cerrar la primer conexion y crear otra nueva en la funcion creartoken y anduvo fenomeno.
La conclusion que yo saco es que de nada sirve utilizar el patrón Singleton con PDO ya que para llamar a otra conexion PDO es obigatorio haber cerrado antes otra conexion que tuviesemos abierta.
Corrijanme si esto no es así.
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 06:20.