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

Clases para tabla usuarios y conexion a base de datos PDO. Seguras?

Estas en el tema de Clases para tabla usuarios y conexion a base de datos PDO. Seguras? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas... hace un par de dias postee mi clase para conectarme y ejecutar sentencias en mysql y me recomendaron que usara PDO ya que mysql* ...
  #1 (permalink)  
Antiguo 06/01/2013, 17:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 51
Antigüedad: 14 años, 8 meses
Puntos: 1
Clases para tabla usuarios y conexion a base de datos PDO. Seguras?

Buenas... hace un par de dias postee mi clase para conectarme y ejecutar sentencias en mysql y me recomendaron que usara PDO ya que mysql* queda obsoleta... ademas de las ventajas que tiene PDO.

Así fue que logre conectarme a la base de datos y manejarla desde mi clase usuarios (en este caso)

Me gustaria que me comentaran si lo estoy haciendo de forma aceptable...
Funcionar... funciona, hasta ahora me sirve y me resulta bastante comodo... pero es seguro y practico?

Esta clase es solo para obtener los datos para la conexion.

Código PHP:
<?php
class ConfigBD{
    public 
$DBServer;
    public 
$DBName;
    public 
$UserName;
    public 
$Password;
    function 
__construct(){
        
$this->DBServer='localhost';
        
$this->UserName='root';
        
$this->Password='toor';
        
$this->DBName='db';
    }
}
?>
Código PHP:
<?php
include_once 'claseConfigDB.php';

class 
db{
    
/*** Declare instance ***/
    
private static $instance NULL;
     
    
/**
     *
     * the constructor is set to private so
     * so nobody can create a new instance using new
     *
     */
    
private function __construct() {
        
/*** maybe set the db name here later ***/
    
}
     
    
/**
     *
     * Return DB instance or create intitial connection
     *
     * @return object (PDO)
     *
     * @access public
     *
     */
    
public static function getInstance() {
         
        if (!
self::$instance)
        {
            
$conexion = new ConfigBD();
            
self::$instance = new PDO("mysql:host=$conexion->DBServer;dbname=$conexion->DBName",$conexion->UserName,$conexion->Password);; //asi funciona y con variables NO.
            
self::$instance-> setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        }
        return 
self::$instance;
    }
     
    
/**
     *
     * Like the constructor, we make __clone private
     * so nobody can clone the instance
     *
     */
    
private function __clone(){
    }
     
/*** end of class ***/
Y esta es mi clase Usuario para mi tabla de usuarios

Código PHP:
<?php
include_once "claseBaseDatos.php";

class 
Usuario{

    private 
$id_usuario;
    private 
$nombre;
    private 
$apellido;
    private 
$usuario;
    private 
$pass;
    private 
$rol;
    private 
$email;
    private 
$telefono;
    private 
$activo;

    public function 
__construct(){
        
$this->idusuario "";
        
$this->nombre "";
        
$this->apellido "";
        
$this->usuario "";
        
$this->pass "";
        
$this->rol "";
        
$this->email "";
        
$this->telefono "";
        
$this->activo "";
    }
    public function 
cargar($id_usuario null$nombre$apellido$usuario$pass$rol$email$telefono){
        
$this->setIdUsuario($id_usuario);
        
$this->setNombre($nombre);
        
$this->setApellido($apellido);
        
$this->setUsuario($usuario);
        
$this->setPass($pass);
        
$this->setRol($rol);
        
$this->setEmail($email);
        
$this->setTelefono($telefono);
    }
    
    public function 
setIdUsuario($id_usuario){
        
$this->idusuario $id_usuario;
    }
    public function 
setNombre($nombre){
        
$this->nombre=$nombre;
    }
    public function 
setApellido($apellido){
        
$this->apellido=$apellido;
    }
    public function 
setUsuario($usuario){
        
$this->usuario=$usuario;
    }
    public function 
setPass($pass){
        
$this->pass=$pass;
    }
    public function 
setRol($rol){
        
$this->rol=$rol;
    }
    public function 
setEmail($email){
        
$this->email=$email;
    }
    public function 
setTelefono($telefono){
        
$this->telefono=$telefono;
    }
    public function 
setActivo($activo){
        
$this->activo=$activo;
    }
    
    public function 
getIdUsuario(){
        return 
$this->idusuario;
    }
    public function 
getNombre(){
        return 
$this->nombre;
    }
    public function 
getApellido(){
        return 
$this->apellido;
    }
    public function 
getUsuario(){
        return 
$this->usuario;
    }
    public function 
getPass(){
        return 
$this->pass;
    }
    public function 
getRol(){
        return 
$this->rol;
    }
    public function 
getEmail(){
        return 
$this->email;
    }
    public function 
getTelefono(){
        return 
$this->telefono;
    }
    public function 
getActivo(){
        return 
$this->activo;
    }
    
    public function 
agregarUsuario(){
        
$query="INSERT INTO usuarios (id_usuario, nombre, apellido, usuario, pass, rol, email, telefono) VALUES (:id_usuario, :nombre, :apellido, :usuario, :pass, :rol, :email, :telefono)";
        try
        {
            
$comando DB::getInstance()->prepare($query);
            
$rows $comando->execute(array(':id_usuario' => $this->getIdUsuario(), ':nombre' => $this->getNombre(), ':apellido' => $this->getApellido(), ':usuario' => $this->getUsuario(), ':pass' => $this->getPass(), ':rol' => $this->getRol(), ':email' => $this->getEmail(), ':telefono' => $this->getTelefono()));
            if( 
$rows == ){echo 'INSERT correcto';}
        }
        catch(
PDOException $e)
        {
            echo 
'Error: ' $e->getMessage();
        }
    }
    public function 
buscarUsuario($id_usuario){
        
$query "SELECT * FROM usuarios WHERE id_usuario=".(int)$id_usuario;
        
        try {
            
$comando DB::getInstance()->prepare($query);
            
$comando->execute();
            if(
$row $comando->fetch(PDO::FETCH_ASSOC)) {
                
$this->setIdUsuario($row['id_usuario']);
                
$this->setNombre($row['nombre']);
                
$this->setApellido($row['apellido']);
                
$this->setUsuario($row['usuario']);
                
$this->setRol($row['rol']);
                
$this->setEmail($row['email']);
                
$this->setTelefono($row['telefono']);
                
$this->setActivo($row['activo']);
    
                return 
true;
            }else{
                echo 
'No hay resultado para esa consulta';
                return 
false;
            }

        }catch(
PDOException $e){
            echo 
'Error: ' $e->getMessage();
        }
    }
    public static function 
listarUsuarios(){
        
$query "SELECT * FROM usuarios";
        try {
            
$comando DB::getInstance()->prepare($query);
            
$comando->execute();
            
$arreglo = array();
            while( 
$datos $comando->fetch() ) {
                
                
$usuario=new Usuario();
                
$usuario->cargar($datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7], $datos[8]);
                
array_push($arreglo,$usuario);
            }
            return 
$arreglo;
        }catch(
PDOException $e){
            echo 
'Error: ' $e->getMessage();
        }
    }
    
    public function 
eliminarUsuario(){
        
$query="DELETE FROM usuarios WHERE id_usuario = :id_usuario";
        try
        {
            
$comando DB::getInstance()->prepare($query);
            
$rows $comando->execute(array(':id_usuario' => $this->getIdUsuario()));
            if( 
$rows == ){echo 'DELETE correcto';}
        }
        catch(
PDOException $e)
        {
            echo 
'Error: ' $e->getMessage();
        }
    }
    
    public function 
editarUsuario(){
        try
        {
            
$comando DB::getInstance()->prepare('UPDATE usuarios SET nombre = :nombre, apellido = :apellido, usuario = :usuario, pass = :pass, rol = :rol, email = :email, telefono = :telefono, activo = :activo WHERE id_usuario = :id_usuario');
            
$rows $comando->execute(array(':nombre' => $this->getNombre(), ':apellido' => $this->getApellido(), ':usuario' => $this->getUsuario(), ':pass' => md5($this->getPass()), ':rol' => $this->getRol(), ':email' => $this->getEmail(), ':telefono' => $this->getTelefono(), ':activo' => $this->getActivo(), ':id_usuario' => $this->getIdUsuario()));
            if( 
$rows == ){echo 'UPDATE correcto';}
        }
        catch(
PDOException $e)
        {
            echo 
'Error: ' $e->getMessage();
        }
    }
}
?>
Las dos primeras clases las saque de algun lado... diria de donde pero no me acuerdo, si alguien sabe que le de los creditos jeje.

Gracias por todo saludos!
  #2 (permalink)  
Antiguo 06/01/2013, 21:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Clases para tabla usuarios y conexion a base de datos PDO. Seguras?

Pues sí a la hora de usar Prepared Statements realmente le estas dando mucha seguridad a tu clase, pero revisa el tema del Singleton, es considerado un AntiPattern
  #3 (permalink)  
Antiguo 11/01/2013, 19:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 51
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Clases para tabla usuarios y conexion a base de datos PDO. Seguras?

uuuuyy esas palabras mas raras que me dan ustedes!! jajaja

Gracias che!!... ahora googleo...
  #4 (permalink)  
Antiguo 12/01/2013, 04:31
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Clases para tabla usuarios y conexion a base de datos PDO. Seguras?

El singleton que te dice es la manera en la que recoges la instancia de tu clase de base de datos.

Haz lo que debes (instaciar PDO, etc) en el constructor y hazlo publico.

Otro tip: Por convención, los nombres de las clases deben empezar por mayúscula, y el nombre del archivo debe ser igual al de la clase. Esto te permitirá mantener legible tu código tanto a ti como a otras personas que puedan acceder a él.

Etiquetas: clases, conexion, mysql, pdo, php, tabla, usuarios, variables
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:13.