CRUD PHP usando PDO. En este artículo mostraremos un ejemplo completo para hacer operaciones con la base de datos denominado CRUD (crear, leer, actualizar y eliminar) usando el lenguaje PHP y su extensión PDO. En anteriores post hemos aprendido sobre sobre el manejo de los componentes de un crud y la conexión con la base de datos.
- C.- Insertar registros
- R.- Leer registros
- U.- Editar registros
- D.- Borrar registros
Recursos:CRUD PHP usando PDO
Para poder crear un CRUD PDO necesitamos de algunos recursos fundamentales y a continuación los detallare:
- Lenguaje PHP.- En este ejemplo usaremos PHP. Sin embargo, también debe estar habilitada la extensión PDO.
- Base de datos MySQL.- Lo usaremos para recuperar la información e inserción de los datos.
- Librería BootStrap.- Su uso es de estética para nuestro proyecto y rápido desarrollo de sistemas
- HTML5.- Lo usaremos como base para poder crear tablas, formularios etc.
Pasos: CRUD PHP usando PDO
Primeramente tenemos que tener una tabla con su respectiva base de datos en MySQL y la secuencia de comandos SQL.
1.- Creación de conexión PDO: BDconect.php
El siguiente código muestra cómo crear una conexión PDO en PHP y para este ejemplo usaremos el fichero con el nombre de BDconect.php
<?php // DB CREDENCIALES DE USUARIO. define('DB_HOST','localhost'); define('DB_USER','root'); define('DB_PASS',''); define('DB_NAME','php_insertarpdo'); // Ahora, establecemos la conexión. try { // Ejecutamos las variables y aplicamos UTF8 $connect = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); } catch (PDOException $e) { exit("Error: " . $e->getMessage()); } ?>
2.- Insertar PDO PHP: Insert Into
En este ejemplo usaremos un botón HTML que llamara a un formulario para poder recoger la información y posteriormente insertar registros. Por lo tanto, si el formulario es visible podemos ingresar la información necesaria para agregar una nueva fila en nuestra tabla MySQL.
a) Formulario HTML
Aquí en este formulario incluiremos los campos que deseamos recoger y luego enviarlo a la BD. Sin embargo, solo se habilitara si se presiona el botón «Nuevo registro«.
<!-- Insertar Registros--> <?php if (isset($_POST['formInsertar'])){?> <div class="col-12 col-md-12"> <form action="" method="POST"> <div class="form-row"> <div class="form-group col-md-6"> <label for="nombres">Nombres</label> <input name="nombres" type="text" class="form-control" placeholder="Nombres"> </div> <div class="form-group col-md-6"> <label for="edad">Apellidos</label> <input name="apellidos" type="text" class="form-control" id="edad" placeholder="Apellidos"> </div> </div> <div class="form-row"> <div class="form-group col-md-6"> <label for="profesion">Profesión</label> <input name="profesion" type="text" class="form-control" id="profesion" placeholder="Profesion"> </div> <div class="form-group col-md-6"> <label for="Estado">Estado</label> <select required name="estado" class="form-control" id="Estado"> <option value=""><< >></option> <option value="Colombia">Colombia</option> <option value="Argentina">Argentina</option> <option value="Ecuador">Ecuador</option> <option value="Peru">Peru</option> <option value="Brasil">Brasil</option> <option value="Bolivia">Bolivia</option> <option value="Chile">Chile</option> </select> </div> </div> <div class="form-group"> <button name="insertar" type="submit" class="btn btn-primary btn-block">Guardar</button> </div> </form> </div> <?php } ?> <!-- Fin Insertar Registros-->
b) Código PHP de inserción a la BD
Este script será el encargado de enviar los datos del formulario a la base de datos. Sin embargo, tendrá que pasar algunas validaciones para verificar la información.
<?php if(isset($_POST['insertar'])){ ///////////// Informacion enviada por el formulario ///////////// $nombres=$_POST['nombres']; $apellidos=$_POST['apellidos']; $profesion=$_POST['profesion']; $estado=$_POST['estado']; $fregis = date('Y-m-d'); ///////// Fin informacion enviada por el formulario /// ////////////// Insertar a la tabla la informacion generada ///////// $sql="insert into tbl_personal(nombres,apellidos,profesion,estado,fregis) values(:nombres,:apellidos,:profesion,:estado,:fregis)"; $sql = $connect->prepare($sql); $sql->bindParam(':nombres',$nombres,PDO::PARAM_STR, 25); $sql->bindParam(':apellidos',$apellidos,PDO::PARAM_STR, 25); $sql->bindParam(':profesion',$profesion,PDO::PARAM_STR,25); $sql->bindParam(':estado',$estado,PDO::PARAM_STR,25); $sql->bindParam(':fregis',$fregis,PDO::PARAM_STR); $sql->execute(); $lastInsertId = $connect->lastInsertId(); if($lastInsertId>0){ echo "<div class='content alert alert-primary' > Gracias .. Tu Nombre es : $nombres </div>"; } else{ echo "<div class='content alert alert-danger'> No se pueden agregar datos, comuníquese con el administrador </div>"; print_r($sql->errorInfo()); } }// Cierra envio de guardado ?>
3.- PHP PDO: Leer
Esta opción es muy importante porque nos permite leer y mostrar la información existente en una tabla haciendo uso de una consulta SQL. Sin embargo, estamos usando PDO como conexión a MySQL.
<table class="table table-bordered table-striped"> <thead class="thead-dark"> <th width="18%">Nombres</th> <th width="22%">Apellidos</th> <th width="22%">Profesión</th> <th width="14%">Estado</th> <th width="13%">Fecha registro</th> <th width="13%" colspan="2"></th> </thead> <tbody> <?php $sql = "SELECT * FROM tbl_personal"; $query = $connect -> prepare($sql); $query -> execute(); $results = $query -> fetchAll(PDO::FETCH_OBJ); if($query -> rowCount() > 0) { foreach($results as $result) { echo "<tr> <td>".$result -> nombres."</td> <td>".$result -> apellidos."</td> <td>".$result -> profesion."</td> <td>".$result -> estado."</td> <td>".$result -> fregis."</td> <td> <form method='POST' action='".$_SERVER['PHP_SELF']."'> <input type='hidden' name='id' value='".$result -> id."'> <button name='editar'>Editar</button> </form> </td> <td> <form onsubmit=\"return confirm('Realmente desea eliminar el registro?');\" method='POST' action='".$_SERVER['PHP_SELF']."'> <input type='hidden' name='id' value='".$result -> id."'> <button name='eliminar'>Eliminar</button> </form> </td> </tr>"; } } ?> </tbody> </table>
4.- Actualizar fila de base de datos
Para poder realizar esta acción nos apoyaremos en un formulario HTML y en ese formulario mostraremos la información extraída de la BD y posteriormente poder modificar algunos valores según corresponda.
<?php if(isset($_POST['actualizar'])){ ///////////// Informacion enviada por el formulario ///////////// $id=trim($_POST['id']); $nombres=trim($_POST['nombres']); $apellidos=trim($_POST['apellidos']); $profesion=trim($_POST['profesion']); $estado=trim($_POST['estado']); $fregis = date('Y-m-d'); ///////// Fin informacion enviada por el formulario /// ////////////// Actualizar la tabla ///////// $consulta = "UPDATE tbl_personal SET `nombres`= :nombres, `apellidos` = :apellidos, `profesion` = :profesion, `estado` = :estado, `fregis` = :fregis WHERE `id` = :id"; $sql = $connect->prepare($consulta); $sql->bindParam(':nombres',$nombres,PDO::PARAM_STR, 25); $sql->bindParam(':apellidos',$apellidos,PDO::PARAM_STR, 25); $sql->bindParam(':profesion',$profesion,PDO::PARAM_STR,25); $sql->bindParam(':estado',$estado,PDO::PARAM_STR,25); $sql->bindParam(':fregis',$fregis,PDO::PARAM_STR); $sql->bindParam(':id',$id,PDO::PARAM_INT); $sql->execute(); if($sql->rowCount() > 0) { $count = $sql -> rowCount(); echo "<div class='content alert alert-primary' > Gracias: $count registro ha sido actualizado </div>"; } else{ echo "<div class='content alert alert-danger'> No se pudo actulizar el registro </div>"; print_r($sql->errorInfo()); } }// Cierra envio de guardado ?>
5.- Eliminar fila mediante PDO
El siguiente código PHP muestra cómo accionar la consulta de eliminación mediante la conexión PDO. Es por eso que usaremos la consulta: «delete from table«.
<?php if(isset($_POST['eliminar'])){ ////////////// Actualizar la tabla ///////// $consulta = "DELETE FROM `tbl_personal` WHERE `id`=:id"; $sql = $connect-> prepare($consulta); $sql -> bindParam(':id', $id, PDO::PARAM_INT); $id=trim($_POST['id']); $sql->execute(); if($sql->rowCount() > 0) { $count = $sql -> rowCount(); echo "<div class='content alert alert-primary' > Gracias: $count registro ha sido eliminado </div>"; } else{ echo "<div class='content alert alert-danger'> No se pudo eliminar el registro </div>"; print_r($sql->errorInfo()); } }// Cierra envio de guardado ?>
Conclusión: CRUD PHP usando PDO
En este artículo estamos usando la extensión PDO del PHP y su uso es muy recomendado entre los programadores que usan base de datos.
Como han podido observar su implementación no es complicado y podemos incorporarlo sin problemas en nuestros proyectos que estemos realizando y sui ya lo tenemos desarrollado podemos migrar a esa extensión.
Descarga del ejemplo completo
Les dejare un archivo ZIP con todos los recursos y la base del ejemplo, un paquete completo
Buenas tardes
Da problemas la descarga, tanto de pago como gratuita :S
Hola Carlos
Gracias por informar, te comento que ya se ha solucionado ese detalle
Saludos
el tutorial está muy bien y se agradece… ahora bien, la sección de descargas del blog es un desastre de diseño. 10 minutos leyendo para para tratar de entender como están organizadas las descargas. Para los tiempos que corren, la buena información es importante pero también la forma de presentarla. Se nota de lejos que no eres diseñador, el diseño está tan centrado en conseguir un pago que descuida la navegabilidad
eres bien quejón, quieres organizado encima. Investiga flojo.!!
Hola, primero que nada gracias por el tutorial.
Al actualizar un registro, podrias explicarme de donde proviene el valor de actualizar : if(isset($_POST[‘actualizar’])) Gracias !.
Hola Nestor,
Gracias por compartir tu sabiduría y me podría y decir como se descarga el proyecto ?
No funciona la ultima opción o todas
Hola Mario
Para descargar puedes usar cualquiera de las 4 opciones y si deseas puedes usar la opción 4 que es 0 pago y sigue los pasos, te abrirá una opción de agregar al carrito de compras, sigue los pasos y aparecerá el enlace para descargar gratis.
Saludos.
Hola Nestor
En primer lugar gracias por compartir tu sabiduría y en segundo quisiera agregarle un paginador pues en la tabla tengo muchos datos ¿hay alguna forma de hacerlo?
Hola, una consulta, no puedo descargar el ejemplo o es que lo estas comercializando? Saludos
Hola Asaad
Para obtener el script tenemos 4 opciones, las tres primeras son descargas de pago pero la cuarta opcion es gratuita.
Sientete libre de elegir que opcion desear usar.
Saludos a la distacia.
Hola, no puedo descargar el ejemplo o es un producto que esta a la venta?
Hola Enrique,
para descargar el script puedes elegir los de pago o si deseas gratis usa la opcion 4, Sientete libre de elegir la opcion.
Saludos a la distancia.