InicioCiencia EducacionPDO conexion modelo y controlado en PHP

PDO conexion modelo y controlado en PHP

Clase PDO

PDO, escrita desde PHP 5.1 da un salto inmenso en el manejo de las bases de datos por PHP. Sencilla, elegante y poderosa capa de abstraccion de acceso a datos. La posibilidad de hacer uso de las mismas funciones para obtener y persistir datos no importa con quién estemos lidiando. Mysql, postgree, SQL server y más nunca había sido tán fácil como ahora, embebido en el lenguaje sin necesidad de librerías externas.

Orientada a objetos permite mediante una isntancia a la clase PDO acceder a todo un mundo de posibilidades. Soporta los siguientes controladores:

PDO_DBLIB: FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD: Firebird / Interbase 6
PDO_IBM: IBM DB2
PDO_INFORMIX: IBM Informix Dynamic Server
PDO_SQLSRV: Microsoft SQL Server
PDO_MYSQL: MySQL 3.x/4.x/5.x
PDO_OCI: Oracle Call Interface
PDO_ODBC: ODBC v3 (IBM DB2, unixODBC y win32 ODBC)
PDO_PGSQL: PostgreSQL
PDO_SQLITE: SQLite 3 y SQLite 2.

Otra manera de conocer los controladores soportados por tu sistema es la siguiente print_r(PDO::getAvailableDrivers());

Como la usamos? sencillo. El objeto PDO debe ser instanciado, necesita solo los parámetros de conexión ya conocidos en cualquier librería de acceso a bases de datos.

Veamos un ejemplo de como crear una clase para conectarnos a nuestra base de datos utilizando PDO.

Clase conexion con PDO.

<?php

/**
* @author Mariano Z
* @copyright 2017
*/


class Conexion extends PDO {
private $tipo_de_base = 'mysql';
private $host = 'localhost';
private $nombre_de_base = 'mibasededatos';
private $usuario = 'root';
private $contrasena = '';
public function __construct() {
//Sobreescribo el método constructor de la clase PDO.
try{
parent::__construct($this->tipo_de_base.':host='.$this->host.';dbname='.$this->nombre_de_base, $this->usuario, $this->contrasena);
}catch(PDOException $e){
echo 'Ha surgido un error y no se puede conectar a la base de datos. Detalle: ' . $e->getMessage();
exit;
}
}
}
?>
Modelo Clase Usuario

La primera parte consta de la definicion de la clase con sus propiedades y atributo, Gets and Sets y el constructor de la clase __construct(). Incluimos el archivo donde esta definida la clase conexion con PDO utilizando require_once (requerido una vez), y al hacerlo ya tenemos acceso a el metodo que esta definido dentro.

Luego cree dos metodos uno para actualizar y otro para guardar, el funcionamiento es sencillo si hay un ID es por que el usuario existe y se actualiza por ejemplo: cambion de contraseña, nombre, mail apellido.. etc. En cambio si el id es null es por que se va a registrar entonces en un solo metodo podemos agrupar dos acciones.

<?php
require_once('conexion.php');

/**
*
*/
class Usuario
{
private $nombre;
private $apellido;
private $email;
private $clave;
private $id;

const TABLA = "usuarios";

function __construct($nombre, $apellido, $email, $clave, $id=null)
{
$this->nombre = $nombre;
$this->apellido = $apellido;
$this->email = $email;
$this->clave = $clave;
$this->id = $id;
}

public function getId() {
return $this->id;
}

public function getNombre()
{
return $this->nombre;
}


public function getApellido()
{
return $this->apellido;
}

public function getEmail()
{
return $this->email;
}

public function getClave()
{
return $this->clave;
}

public function setNombre($nombre)
{
$this->nombre =$nombre;
}
public function setEmail($email)
{
$this->email =$email;
}

public function setClave($clave)
{
$this->pass =$clave;
}

public function setApellido($apellido)
{
$this->apellido =$apellido;
}


public function guardar(){
$conexion = new Conexion();
if($this->id) /*Modifica*/ {
$consulta = $conexion->prepare('UPDATE ' . self::TABLA .' SET nombre = :nombre, apellido = :apellido WHERE id = :id');
$consulta->bindParam(':nombre', $this->nombre);
$consulta->bindParam(':apellido', $this->apellido);
$consulta->bindParam(':id', $this->id);
$consulta->execute();
}else /*Inserta*/ {
$consulta = $conexion->prepare('INSERT INTO ' . self::TABLA .' (nombre, apellido, email, clave) VALUES(:nombre, :apellido, :email, :clave)');
$consulta->bindParam(':nombre', $this->nombre);
$consulta->bindParam(':apellido', $this->apellido);
$consulta->bindParam(':email', $this->email);
$consulta->bindParam(':clave', $this->clave);
$consulta->execute();
$this->id = $conexion->lastInsertId();
}
$conexion = null;
}
}

?>
Controlador

Mi controlador es sencillo simplemente es para implementar la clase y crear el objeto siempre se puede mejorar mas, veran que solo incluyo la clase se puede usar requiere_once(); tambien. En esta parte recibo los datos del formulario creo el objeto y llamo al metodo guardar para registrar un nuevo usuario.

<?php

include('../clases/Usuario.php');


$nombre= $_POST['nombre'] ;
$apellido =$_POST['apellido'];
$email = $_POST['email'];
$clave =md5($_POST['pass']);

$id = null;


$Ousuario = new Usuario($nombre,$apellido,$email,$clave,$id);
$Ousuario->guardar();

echo $Ousuario->getNombre() . ' se ha guardado correctamente con el id: ' . $Ousuario->getId();

?>

Formulario HTML

Y por último dejo el codigo del formulario recuerden que esta para ser enlazado con Bootstrap CSS para que lograr un estilo visual mas amigable.
<!DOCTYPE html>

<html>
<head>
<!-- Aca deberia enlazar mi CSS de bootstrap -->

</head>

<body>

<div class="container">

<form class="form-horizontal" method="post" action="register">

<div class="form-group">
<label>Nombre</label>
<input type="text" name="nombre" class="form-control" required="" placeholder="Ingrese su nombre" />
</div>

<div class="form-group">
<label>Apellido</label>
<input type="text" name="apellido" class="form-control" required="" placeholder="Ingrese su apellido" />
</div>

<div class="form-group">
<label>Correo electronico</label>
<input type="email" name="email" class="form-control" required="" placeholder="Ingrese su email" />
</div>

<div class="form-group">
<label>Clave</label>
<input type="password" name="pass" class="form-control" required="" placeholder="Escriba una clave" />
</div>

<div class="form-group">
<label>Repita su clave</label>
<input type="password" name="repass" class="form-control" required="" placeholder="Repita su clave" />
</div>

<div class="form-group">
<button type="submit" class="btn btn-success">Registrarme</button>
</div>


</form>
</div>

</body>

</html>

Y la vista desde el navegador seria la siguiente:


Para visualizarlo mejor pueden visitar mi pagina web
Datos archivados del Taringa! original
0puntos
22visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

m
Usuario
Puntos0
Posts8
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.