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

mysql y singleton

Estas en el tema de mysql y singleton en el foro de Frameworks y PHP orientado a objetos en Foros del Web. buenas siguiendo el tutorial que hay en http://www.jourmoly.com.ar/introducc...segunda-parte/ y como el server de la pagina que tengo que hacer no soporta pdo decidí aplicar mysql ...
  #1 (permalink)  
Antiguo 02/07/2008, 18:40
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
mysql y singleton

buenas siguiendo el tutorial que hay en http://www.jourmoly.com.ar/introducc...segunda-parte/ y como el server de la pagina que tengo que hacer no soporta pdo decidí aplicar mysql con singleton asi que basandome en el ejemplo citado arme esto:

archivo admin/include/Config.php
Código PHP:
<?php
class Config
    
{
        private 
$vars;
        private static 
$instance;
    
        private function 
__construct()
        {
            
$this->vars = array();
        }
    
        
//Con set vamos guardando nuestras variables.
        
public function set($name$value)
        {
            if(!isset(
$this->vars[$name]))
            {
                
$this->vars[$name] = $value;
            }
        }
    
        
//Con get('nombre_de_la_variable') recuperamos un valor.
        
public function get($name)
        {
            if(isset(
$this->vars[$name]))
            {
                return 
$this->vars[$name];
            }
        }
    
        public static function 
singleton()
        {
            if (!isset(
self::$instance)) {
                
$c __CLASS__;
                
self::$instance = new $c;
            }
    
            return 
self::$instance;
        }
    }
?>
archivo admin/config.php
Código PHP:
<?php
/**
 *     config.php
 *     achivo de configuracion
 *     
 *     @author : Lucas M. Sastre.
 *     @copyright : Onírico Sistemas.
 *     @link : http://www.oniricosistemas.com.ar
 * 
 *     @package : leongieco.com.
 *     @version : 0.1
 */

    
$config Config::singleton();
     
    
$config->set('controllersFolder''controllers/');
    
$config->set('modelsFolder''modelo/');
    
$config->set('viewsFolder''vistas/');
    
    
$config->set('dbhost''localhost');
    
$config->set('dbname''leon_gieco');
    
$config->set('dbuser''root');
    
$config->set('dbpass''');
    
?>
archivo admin/include/DataBase.php
Código PHP:
<?php
/**
 *     database.php
 *     Clase que maneja la conexiones myql.
 *     
 *     @author : Lucas M. Sastre.
 *     @copyright : Onírico Sistemas.
 *     @link : http://www.oniricosistemas.com.ar
 * 
 *     @package : leongieco.com.
 *     @version : 0.1
 */
    
class DataBase 
        
// an array of properties used by __get and __set 
        
private $props
         
        
// the actual connection resource 
        
protected $connection
         
        
// the hostname for the database server 
        
protected $hostname
         
        
// the name of the database to use 
        
protected $database
         
        
// the username to use to access the database 
        
protected $username
         
        
// the password to use to access the database 
        
protected $password
         
        public  function 
__construct($dbHost=null$dbName=null$dbUser=null$dbPass=null) { 
            
$this->database $dbName
            
$this->hostname $dbHost
            
$this->username $dbUser
            
$this->password $dbPass
        } 
         
        public function 
Connected() {
            if (
is_resource($this->connection)) {
                return 
true;
            } else {
                return 
false;
            }
        }

        public function 
AffectedRows() {
            return 
mysql_affected_rows($this->connection);
        }

        public function 
Open() {
            if (
is_null($this->database))
            die(
"MySQL database not selected");
            if (
is_null($this->hostname))
            die(
"MySQL hostname not set");

            
$this->connection = @mysql_connect($this->hostname$this->username$this->password);

            if (
$this->connection === false)
            die(
"Could not connect to database. Check your username and password then try again.\n");

            if (!
mysql_select_db($this->database$this->connection)) {
                die(
"Could not select database");
            }
        }

        public function 
Close() {
            
mysql_close($this->connection);
            
$this->connection null;
        }

        public function 
Query($sql) {
            if (
$this->connection === false) {
                die(
'No Database Connection Found.');
            }

            
$result = @mysql_query($sql,$this->connection);
            if (
$result === false) {
                die(
mysql_error());
            }
            return 
$result;
        }

        public function 
FetchArray($result) {
            if (
$this->connection === false) {
                die(
'No Database Connection Found.');
            }

            
$data = @mysql_fetch_array($result);
            if (!
is_array($data)) {
                die(
mysql_error());
            }
            return 
$data;
        }
    } 
?>
archivo admin/include/ModelBase.php
Código PHP:
<?php
/**
 *     ModelBase.php
 *     Archivo que nos permitira ahorrarnos el paso de iniciar Mysql en cada modelo.
 * 
 *     
 *     @author : Lucas M. Sastre.
 *     @copyright : Onírico Sistemas.
 *     @link : http://www.oniricosistemas.com.ar
 * 
 *     @package : leongieco.com.
 *     @version : 0.1
 *     @return : Ultimas noticias agregradas.
 * 
 */
    
abstract class ModelBase 
    
{
        protected 
$db;
     
        public function 
__construct()
        {
            
$this->db DB::singleton();
            
        }
    }
?>
archivo admin/include/DB.php
Código PHP:
<?php
/**
 *     Db.php
 *     lase que extiende de DATABASE, su única ventaja es que nos permite aplicar el patron Singleton 
 *     para mantener una única instancia de DATABASE.
 *     
 *     @author : Lucas M. Sastre.
 *     @copyright : Onírico Sistemas.
 *     @link : http://www.oniricosistemas.com.ar
 * 
 *     @package : leongieco.com.
 *     @version : 0.1
 */

    
    
class DB extends DataBase {
        private static 
$instance null;
    
        public function 
__construct(){
        
//connect to the MySQL server (replace host, username, and password with your own values)
        
$config Config::singleton();
        
parent::__construct($config->get('dbhost'), $config->get('dbname'),$config->get('dbuser'), $config->get('dbpass'));
        
        }
        
        public static function 
singleton() 
            {
                if( 
self::$instance == null 
                {
                    
self::$instance= new self();
                }
                return 
self::$instance;
            }
    }
?>
bien ahora en mi archivo modelo es asi:
LoginModel.php
Código PHP:
<?php
/**
 *     LoginModel.php
 *     Archivo del Modelo para el login
 * 
 *     
 *     @author : Lucas M. Sastre.
 *     @copyright : Onírico Sistemas.
 *     @link : http://www.oniricosistemas.com.ar
 * 
 *     @package : leongieco.com.
 *     @version : 0.1
 *     
 * 
 */

    
class LoginModel extends DB {
        
        public function 
login($user$pass){
            
$consulta=$this->Query();
        }
    }
?>
bien mi duda es la siguiente, cuando uso pdo yo puedo hacer esto:
$consulta=$this->db->prepare("select * from mitabla");

que deberia configurar para poder hacer los mismo pero con mysql es decir:
$consulta=$this->db->Query("select * from mitabla");

y por ultimo donde deberia poner el $consulta=$this->Connected(); para no tener que llmarlo siempre?

desde ya muchas gracias
  #2 (permalink)  
Antiguo 03/07/2008, 11:02
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: mysql y singleton

Hola destor77,

Lamentablemente la extensión normal de MySQL no soporta Prepared Statements, por lo que no podrás emular su funcionamiento.

Tendrás que re/configurar tu aplicación para usar Querys simples sin bind values.

Tu función Connected si no la quieres llamar siempre, te recomiendo la almacenes en el singleton() de tu clase DB.

Saludos.
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 22:43.