Foros del Web » Programando para Internet » PHP »

Donde esta el error ??? Singleton PDO

Estas en el tema de Donde esta el error ??? Singleton PDO en el foro de PHP en Foros del Web. No logro entender que esta mal. Código PHP: class  SPDO {     static  $dbh ;          public function  __construct ()     {         try         {              $dsn  =  'mysql:host='  ...
  #1 (permalink)  
Antiguo 24/10/2012, 14:44
Avatar de asdmaster  
Fecha de Ingreso: marzo-2010
Mensajes: 98
Antigüedad: 14 años, 1 mes
Puntos: 2
Donde esta el error ??? Singleton PDO

No logro entender que esta mal.

Código PHP:
class SPDO
{
    static 
$dbh;
    
    public function 
__construct()
    {
        try
        {
            
$dsn 'mysql:host=' HOST ';dbname=' DATABASE;
            
self::$dbh = new PDO($dsnUSERPASSWORD);
        }
        catch (
PDOException $e)
        {
            echo 
'Connection failed: ' $e->getMessage();
        }
    }

    public static function 
getInstance()
    {
        if (
self::$dbh == NULL)
        {
            
self::$dbh = new SPDO();
        }
        return 
self::$dbh;
    }

Código PHP:
class Model
{
    public 
$dbh;

    public function 
__construct()
    {
        
$this->dbh SPDO::getInstance();
        
$this->dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARESFALSE);
    }

Cita:
(!) Fatal error: Call to undefined method SPDO::setAttribute()
  #2 (permalink)  
Antiguo 24/10/2012, 14:58
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Donde esta el error ??? Singleton PDO

tu clase spdo, no tiene el metodo setAttribute, lo que debes es heredar de pdo.

Código PHP:
Ver original
  1. class SPDO  extend PDO
  2. { ....

La clase SPDO no tiene el metodo que llamas, o heredas.
self::$dbh = new SPDO();
La que tiene el metodo es pdo, otra cosa en los singleton el constructor es privado, para que no se pueda instanciar directamente la clase.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Última edición por portalmana; 24/10/2012 a las 15:04
  #3 (permalink)  
Antiguo 24/10/2012, 15:07
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Donde esta el error ??? Singleton PDO

Código PHP:
Ver original
  1. < ?php
  2. class SPDO extends PDO
  3. {
  4.     private static $instance = null;
  5.  
  6.     public function __construct()
  7.     {
  8.         $dsn = 'mysql:host=' . HOST . ';dbname=' . DATABASE;
  9.         parent::__construct($dsn, USER, PASSWORD);
  10.     }
  11.  
  12.     public static function singleton()
  13.     {
  14.         if( self::$instance == null )
  15.         {
  16.             self::$instance = new self();
  17.         }
  18.         return self::$instance;
  19.     }
  20. }
  21. ?>
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #4 (permalink)  
Antiguo 24/10/2012, 15:11
Avatar de asdmaster  
Fecha de Ingreso: marzo-2010
Mensajes: 98
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Donde esta el error ??? Singleton PDO

No estoy haciendo esto
SPDO::setAttribute()
esa alerta la muestra el navegador.
Ademas se supone que no tengo para que extender si estoy usando el patron singletgon con una relacion de asosiacion.

Saludos!!
  #5 (permalink)  
Antiguo 24/10/2012, 15:16
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Donde esta el error ??? Singleton PDO

Cita:
Iniciado por asdmaster Ver Mensaje
No estoy haciendo esto
SPDO::setAttribute()
esa alerta la muestra el navegador.
Ademas se supone que no tengo para que extender si estoy usando el patron singletgon con una relacion de asosiacion.

Saludos!!
Fijate en el codigo en el constructor, que debe ser privado,
pones:
Código PHP:
Ver original
  1. self::$dbh = new PDO($dsn, USER, PASSWORD);
ahora en getInstance
Código PHP:
Ver original
  1. self::$dbh = new SPDO();
Con lo cual $dbh tiene a SPDO y no a PDO
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 24/10/2012, 15:21
Avatar de asdmaster  
Fecha de Ingreso: marzo-2010
Mensajes: 98
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Donde esta el error ??? Singleton PDO

Cita:
Iniciado por portalmana Ver Mensaje
Fijate en el codigo en el constructor, que debe ser privado,
pones:
Código PHP:
Ver original
  1. self::$dbh = new PDO($dsn, USER, PASSWORD);
ahora en getInstance
Código PHP:
Ver original
  1. self::$dbh = new SPDO();
Con lo cual $dbh tiene a SPDO y no a PDO
Gracias portalmana.
Saludos!

Etiquetas: mysql, pdo, singleton
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 14:09.