Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/07/2008, 18:40
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años, 2 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