Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/08/2010, 04:32
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Duda con PDO y mi clase

Buenas,

Haber si me podéis aclarar estas cinco dudas que me surgen al crear mis propias clases :)

Utilizo PDO para conectarme a la base de datos.

1) Según he leído no hace falta sanar las variables que vienen por GET O POST ya que PDO se encarga automáticamente, es correcto? leído aquí... http://www.arzion.com/empresa-de-int...-datos-con-PDO

2) Cuando la aplicación entre en producción debo quitar esta línea verdad?
$db->setAttribute(CountPDO::ATTR_ERRMODE, CountPDO::ERRMODE_EXCEPTION);

3) Para utilizar PDO en mi clase "categoria" ¿lo estoy haciendo bien, o existe otra forma mejor?

Código PHP:
Ver original
  1. <?php
  2. require_once("configBD.php");
  3.  
  4. class db{
  5.     /*** Declare instance ***/
  6.     private static $instance = NULL;
  7.  
  8.     /**
  9.     *
  10.     * the constructor is set to private so
  11.     * so nobody can create a new instance using new
  12.     *
  13.     */
  14.     private function __construct() {
  15.       /*** maybe set the db name here later ***/
  16.     }
  17.  
  18.     /**
  19.     *
  20.     * Return DB instance or create intitial connection
  21.     *
  22.     * @return object (PDO)
  23.     *
  24.     * @access public
  25.     *
  26.     */
  27.     public static function getInstance() {
  28.  
  29.     if (!self::$instance)
  30.         {
  31.         //self::$instance = new PDO('mysql:dbname='.$bd.';host='.$servidor.'', $user, $pass);;
  32.         self::$instance = new PDO("mysql:host=localhost;dbname=codelab", 'root', 'jupiter');; //asi funciona y con variables NO.
  33.         self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  34.         }
  35.     return self::$instance;
  36.     }
  37.  
  38.     /**
  39.     *
  40.     * Like the constructor, we make __clone private
  41.     * so nobody can clone the instance
  42.     *
  43.     */
  44.     private function __clone(){
  45.     }
  46.  
  47. } /*** end of class ***/
  48.  
  49. class Categoria{
  50.     private $nombreCategoria;
  51.    
  52.     // Listar todas las categorias de la base de datos
  53.     public function listarCategorias(){
  54.         $query = sprintf("SELECT nombre FROM categorias");
  55.         $comando = DB::getInstance()->prepare($query);
  56.         $comando->execute();
  57.  
  58.         while( $datos = $comando->fetch() ) {
  59.         // Imprimimos resultados
  60.         echo $datos[0].'<br />';
  61.         }
  62.     }
  63.  
  64.     // Agrega una nueva categoria
  65.     public function agregarCategoria($nombre){
  66.         $this->nombreCategoria=$nombre;
  67.         $query = sprintf("INSERT INTO categorias (nombre) values ('$this->nombreCategoria')");
  68.         $comando = DB::getInstance()->prepare($query);
  69.         $comando->execute();
  70.     }
  71. }
  72. $cat = new Categoria();
  73. $cat->listarCategorias();
  74. $cat->agregarCategoria('nueva_cat');
  75.  
  76. ?>


4) Debería tener separado la conexión a la base de datos o dentro de la clase categoría? Es necesario tener una clase global para la conexión a la base de datos. O con la utilización de PDO esto me lo puedo ahorrar?

5) Haciéndolo como en el ejemplo que puse arriba, cuantas instancias utilizo? Utilizo una ya que cuando se llama al metodo agregarCategoria() reutiliza la instancia de listarcategorias()?

Muchas gracias de antemano!