17 de abril de 2015

PHP PDO Singleton CRUD

Lo primero es crear la clase Singleton que implementara el patrón de diseño Singleton que servirá para asegurarnos de crear una instancia de clase única, estas características las utilizaremos para conectarnos a la base de datos.

Te recomiendo veas esta entrada en caso quieras conocer mas detalladamente este patrón y sus limitaciones.
<?php
class Singleton 
{ 
    // Ubicación: TuServidor/Clases/Singleton.php

    public $db;     
    private static $dns = "mysql:host=tuServidor;dbname=tuBasedeDatos"; 
    private static $user = "Usuario"; 
    private static $pass = "tuPassword";     
    private static $instance;

    public function __construct ()  
    {        
       $this->db = new PDO(self::$dns,self::$user,self::$pass);       
    } 

    public static function getInstance()
    { 
        if(!isset(self::$instance)) 
        { 
            $object= __CLASS__; 
            self::$instance=new $object; 
        } 
        return self::$instance; 
    }    
} 
?>
Creamos un nuevo archivo php y especificamos la clase Implementacion, esta se encargara de realizar operaciones sobre una tabla especifica, para ello realiza la conexión sobre la base de datos utilizando el patrón Singleton implementado en la clase Singleton.php

<?php
require_once "Singleton.php"; 
class Implementacion  
{
    // Ubicación: TuServidor/Clases/Implementacion.php

 public function validar($codigo) 
    { 
        $cc = Singleton::getInstance(); 
        $sql = "SELECT count(*) FROM products WHERE categoryid=:codigo ";        
        $result = $cc->db->prepare($sql); 
        $params = array("codigo" => $codigo); 
        $result->execute($params); 
        $affected_rows = $result->fetchColumn(); 
        return ($affected_rows); 
        //retorna numerico 
    } 

 public function Datos($codigo) 
    { 
        $cc = Singleton::getInstance(); 
        $sql="SELECT * from products where categoryid=:codigo"; 
        $result = $cc->db->prepare($sql);     
        $params = array("codigo" => $codigo); 
        $result->execute($params); 
        return ($result); 
        //retorna conjunto de datos 
    } 

 public function NuevoCategoria($nombre,$descripcion) 
    {         
        $cc = Singleton::getInstance(); 
        $sql = "Insert into categories(nombre,descripcion)"; 
        $sql .= " values( "; 
        $sql .=" :nombre,:description)"; 
        $result = $cc->db->prepare($sql); 
        $params = array("nombre" =>$nombre, "descripcion" => $descripcion); 
        $result->execute($params);     
    } 

} 
?>
Ahora desde un archivo PHP comun y corriente hacemos uso de las clases definidas anteriormente aprovechando la programación orientada a objetos, te recomiendo adecuar las validaciones necesarias.

<?php
  // Ubicacion:TuServidor 
require_once("Clases/Implementacion.php");   

        $aproducts = new Cproducts;     
        $affected_rows=$aproducts->validar($codigo); 

       $result=$aproducts->Datos($codigo); 
       foreach($result as $row)  
       { 
               echo($row['productname']); 
       } 
?>